Tools: Coding Challenge Practice - Question 107

Tools: Coding Challenge Practice - Question 107

Source: Dev.to

The task is to implement the Observable from. from() creates an Observable from an array, an array-like object, a Promise, an iterable, or an observable-like object. It does not emit immediately and decides how to emit values based on the type of input. If the input type is an observable-like object, the values flow directly to the new observer. If the input type is a promise, if it resolves, it emits one value and calls complete(). If it rejects, it calls error() If the input type is iterable, each value is emitted via next in a synchronous loop. Call complete after iteration. If the input type is a non-iterable array-like object If the input is invalid, throw an error Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse CODE_BLOCK:
function from(input) { // your code here
} Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
function from(input) { // your code here
} CODE_BLOCK:
function from(input) { // your code here
} COMMAND_BLOCK:
if (input && typeof input.subscribe === "function") { return new Observable(observer => input.subscribe(observer));
} Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK:
if (input && typeof input.subscribe === "function") { return new Observable(observer => input.subscribe(observer));
} COMMAND_BLOCK:
if (input && typeof input.subscribe === "function") { return new Observable(observer => input.subscribe(observer));
} COMMAND_BLOCK:
if (input && typeof input.then === "function") { return new Observable(observer => { let cancelled = false; input.then( value => { if (!cancelled) { observer.next(value); observer.complete && observer.complete(); } }, err => !cancelled && observer.error && observer.error(err) ); return () => { cancelled = true; }; });
} Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK:
if (input && typeof input.then === "function") { return new Observable(observer => { let cancelled = false; input.then( value => { if (!cancelled) { observer.next(value); observer.complete && observer.complete(); } }, err => !cancelled && observer.error && observer.error(err) ); return () => { cancelled = true; }; });
} COMMAND_BLOCK:
if (input && typeof input.then === "function") { return new Observable(observer => { let cancelled = false; input.then( value => { if (!cancelled) { observer.next(value); observer.complete && observer.complete(); } }, err => !cancelled && observer.error && observer.error(err) ); return () => { cancelled = true; }; });
} COMMAND_BLOCK:
if (input && Symbol.iterator in Object(input)) { return new Observable(observer => { try { for (const item of input) { observer.next(item); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } });
} Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK:
if (input && Symbol.iterator in Object(input)) { return new Observable(observer => { try { for (const item of input) { observer.next(item); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } });
} COMMAND_BLOCK:
if (input && Symbol.iterator in Object(input)) { return new Observable(observer => { try { for (const item of input) { observer.next(item); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } });
} COMMAND_BLOCK:
if (input && typeof input === "object" && typeof input.length === "number") { return new Observable(observer => { try { for (let i = 0; i < input.length; i++) { observer.next(input[i]); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } });
} Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK:
if (input && typeof input === "object" && typeof input.length === "number") { return new Observable(observer => { try { for (let i = 0; i < input.length; i++) { observer.next(input[i]); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } });
} COMMAND_BLOCK:
if (input && typeof input === "object" && typeof input.length === "number") { return new Observable(observer => { try { for (let i = 0; i < input.length; i++) { observer.next(input[i]); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } });
} CODE_BLOCK:
throw new TypeError("Input type not supported"); Enter fullscreen mode Exit fullscreen mode CODE_BLOCK:
throw new TypeError("Input type not supported"); CODE_BLOCK:
throw new TypeError("Input type not supported"); COMMAND_BLOCK:
function from(input) { // your code here if(input && typeof input.subscribe === "function") { return new Observable(observer => input.subscribe(observer)) } if(input && typeof input.then === "function") { return new Observable(observer => { let cancelled = false; input.then( value => { if(!cancelled) { observer.next(value); observer.complete && observer.complete() } }, err => !cancelled && observer.error && observer.error(err) ) return () => { cancelled = true; } }) } if(input && Symbol.iterator in Object(input)) { return new Observable(observer => { try { for(const item of input) { observer.next(item); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } }) } if(input && typeof input === "object" && typeof input.length === "number") { return new Observable(observer => { try { for(let i = 0; i < input.length; i++) { observer.next(input[i]); } observer.complete && observer.complete() } catch (err) { observer.error && observer.error(err); } }) } throw new TypeError("Input type not supported");
} Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK:
function from(input) { // your code here if(input && typeof input.subscribe === "function") { return new Observable(observer => input.subscribe(observer)) } if(input && typeof input.then === "function") { return new Observable(observer => { let cancelled = false; input.then( value => { if(!cancelled) { observer.next(value); observer.complete && observer.complete() } }, err => !cancelled && observer.error && observer.error(err) ) return () => { cancelled = true; } }) } if(input && Symbol.iterator in Object(input)) { return new Observable(observer => { try { for(const item of input) { observer.next(item); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } }) } if(input && typeof input === "object" && typeof input.length === "number") { return new Observable(observer => { try { for(let i = 0; i < input.length; i++) { observer.next(input[i]); } observer.complete && observer.complete() } catch (err) { observer.error && observer.error(err); } }) } throw new TypeError("Input type not supported");
} COMMAND_BLOCK:
function from(input) { // your code here if(input && typeof input.subscribe === "function") { return new Observable(observer => input.subscribe(observer)) } if(input && typeof input.then === "function") { return new Observable(observer => { let cancelled = false; input.then( value => { if(!cancelled) { observer.next(value); observer.complete && observer.complete() } }, err => !cancelled && observer.error && observer.error(err) ) return () => { cancelled = true; } }) } if(input && Symbol.iterator in Object(input)) { return new Observable(observer => { try { for(const item of input) { observer.next(item); } observer.complete && observer.complete(); } catch (err) { observer.error && observer.error(err); } }) } if(input && typeof input === "object" && typeof input.length === "number") { return new Observable(observer => { try { for(let i = 0; i < input.length; i++) { observer.next(input[i]); } observer.complete && observer.complete() } catch (err) { observer.error && observer.error(err); } }) } throw new TypeError("Input type not supported");
}