Вернуть наблюдаемое после нескольких действий - PullRequest
0 голосов
/ 17 января 2019

Мне нужно выполнить некоторые действия (которые я не знаю заранее), и после того, как все они будут выполнены, я хотел бы вернуть пустоту, наблюдаемую для того, кого заинтересованный может слушать, чтобы сделать что-то еще, как только это будет закончено. .

Пример:

Класс А

public hook: () => void;

pubic doAndReturnObservable(): Observable<void>{
    hook();
    return Observable.of();
}

public notifyToOther(){
    classB.notify(this.doAndReturnObservable());
}

hook - это функция стрелки, которая передается в класс A и будет включать в себя несколько вещей, которые хотелось бы выполнить универсальным образом

Класс B

public notify(actionsToPerform: Observable<void>){
    actionsToPerform.subscribe(()=>{
       console.log('now all has been done! I can do something else');
    });
}

Дело в том, что я не знаю, что может делать «ловушка», может быть несколько действий, и они могут включать вызовы http или асинхронные процессы. Мой метод doAndReturnObservable будет запускать ловушку со всем, что нужно сделать, но он не будет ждать, пока он завершит работу, прежде чем вернуть наблюдаемую, на которую я подписываюсь, поэтому мой консольный журнал показывается до того, как ловушка будет выполнена.

Есть ли у кого-то способ достичь такого рода вещей? Заранее спасибо.

1 Ответ

0 голосов
/ 17 января 2019

Отметьте это:

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });

  let result = await promise; // wait till the promise resolves (*)

  alert(result); // "done!"
}

Здесь обещание будет ждать завершения обещания для разрешения.Ссылка на https://javascript.info/async-await

...