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)不同,但在许多情况下是可以的。