我有一个像这样的简单函数,我期待着它true。它创建一个Observablefrom true,把它变成一个 promise,然后await: async function returnTrue() { return await of(true).toPromise(); } var b = returnTrue(); console.log("b is: ", b);当b记录的值时,它会记录:b is:Promise {}IIUC 执行此操作的另一种方法是pipe像这样对 observable 进行处理:function returnFalse() { return of(false).pipe(map(b=>{ return b; }));}const c = returnFalse();console.log('Return value c: ', c);在这种情况下,记录的值是:Return value c:Observable {_isScalar: false, source: {…}, operator: {…}}想法?概括总结了这个问题的答案,以便使用 RxJS Observables 进行同步编程:https://medium.com/p/6276721e674a
2 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
从async
函数上下文返回的任何值都包装在 Promise 中。
在您的代码中,虽然您返回的结果await
实际上等待of(true).toPromise()
Promise 得到解决,但确实如此,但由于async
函数上下文,已解决的值再次包装在承诺中。
这在 MDN的async
函数文档中有说明:
async 函数声明定义了一个异步函数,它返回一个 AsyncFunction 对象。异步函数是通过事件循环异步操作的函数,使用隐式 Promise 返回其结果
在使用的第二个代码中Observable
,您使用的pipe
运算符根据定义Observable
在应用文档中的给定操作(在您的情况下为映射)后返回另一个:
pipe(operations: ...*): Observable
返回: Observable 所有已按传入顺序调用的运算符的 Observable 结果。
添加回答
举报
0/150
提交
取消