Javascript 如何使用Observable启动下一个异步任务
在某些情况下,我们需要启动异步任务,如:Javascript 如何使用Observable启动下一个异步任务,javascript,rxjs,observable,settimeout,Javascript,Rxjs,Observable,Settimeout,在某些情况下,我们需要启动异步任务,如: setTimeout(() => { // do something }, 0); 它启动内容的异步任务 但这是丑陋的,不推荐。 我怎样才能用可观察的做到这一点呢?我宁愿使用而不是可观察的。它是土生土长的,你可以用它做同样的事情: let myPromise = new Promise((resolve, reject) => { // we do something if(/* an error has occured
setTimeout(() => {
// do something
}, 0);
它启动内容的异步任务
但这是丑陋的,不推荐。
我怎样才能用可观察的做到这一点呢?我宁愿使用而不是可观察的。它是土生土长的,你可以用它做同样的事情:
let myPromise = new Promise((resolve, reject) => {
// we do something
if(/* an error has occured */) {
// we don't want to return in the then function if there is an error.
reject(theError);
}
let valueToReturn = "we want to return this from the promise";
resolve(valueToReturn);
});
myPromise.then((data) => {
//the async process is done
console.log(data) // <-- "we want to return this from the promise"
}).catch((error) => {
// we print the error if there is one.
console.error(error);
});
let myPromise=新承诺((解决、拒绝)=>{
//我们做点什么
如果(/*发生错误*/){
//如果出现错误,我们不希望返回then函数。
拒绝(错误);
}
让valueToReturn=“我们希望从承诺中返还此内容”;
决心(价值观转向);
});
我的承诺。然后((数据)=>{
//异步过程完成了
console.log(数据)//{
//如果有错误,我们将打印错误。
控制台错误(error);
});
当然,您可以对Observable使用一些出色的函数,例如管道
,但是如果您不需要它,就不需要一个全新的库来实现这一点。对于这种情况(setTimeout,0
),您可以使用。在内部,异步调度程序
与setInterval
一起工作
source$.pipe(
observeOn(asyncScheduler)
);
有了承诺,它可以简化为Promise.resolve(true)than(…但我使用的是Angular,我不喜欢将观察值与承诺混为一谈,拥有Promise.resolve(true)。然后(…)
不会实现任何事情。你的承诺是立即解决。如果你想使用Observable,你可以使用new Observable(订阅服务器=>{//do something}).subscribe(…)
Promise.resolve(true)。然后(…)启动新的微任务。它确实与setTimeout(启动Mackotask)不同,但在许多情况下是可以的。