在可观察对象内部使用Promise

时间:2020-09-17 11:53:18

标签: javascript promise rxjs observable

由于在Observable内部,我们可以选择调用Promise,因此我对此进行了澄清。

由于诺言在声明后立即执行,是否在不附加Subscribe方法的情况下执行诺言? 而且,由于无法取消它,为什么有人会想到在可观察对象内部调用Promise。

Rx.Observable.fromPromise():

const computeFutureValue = new Promise((resolve, reject) => {
//make http api call
});

Rx.Observable.fromPromise(computeFutureValue)
.subscribe(
val => {
console.log(val);
},
err => {
console.log(`Error occurred: ${err}`);
},
() => {
console.log('All done!');
});

1 个答案:

答案 0 :(得分:4)

正如您所说,创建Promise时将执行Promises主体。 因此,当您创建此Promise时:

const computeFutureValue = new Promise((resolve, reject) => {
  //make http api call
});

无论您下一步做什么,都会执行http请求。使用from(或fromPromise)将Promise转换为Observable并订阅该Observable不会影响Promise,它也不会以任何方式执行。

如果您希望能够与Observables提供的所有运算符一起使用,或者因为您的应用程序在某些时候可以使用Observable且需要使用Observable,则希望将Promise转换为Observable。

如果您只想在订阅Observable时创建并执行Promise,则可以使用defer,请在此处查看我的答案:Convert Promise to Observable