Как запустить следующую асинхронную задачу с Observable - PullRequest
0 голосов
/ 01 ноября 2019

В некоторых случаях нам нужно запустить асинхронную задачу, например:

setTimeout(() => {
    // do something

}, 0);

Запускает асинхронную задачу для содержимого.

Но это некрасиво и не рекомендуется. Как я могу сделать это с Observable?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Для этого сценария (setTimeout, 0) вы можете использовать Планировщики . Внутренне asyncScheduler работает с setInterval.

source$.pipe(
  observeOn(asyncScheduler)
);
0 голосов
/ 01 ноября 2019

Я бы использовал Обещание , а не Наблюдаемый. Он является родным, и вы можете получить с ним то же самое:

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);
});

Конечно, вы можете использовать некоторые замечательные функции с Observable, такие как pipe, но если вам это не нужно, вы неДля этого нужна совершенно новая библиотека.

...