为了账号安全,请及时绑定邮箱和手机立即绑定

await for Promise 的结果返回一个承诺?

await for Promise 的结果返回一个承诺?

慕婉清6462132 2021-10-14 15:54:04
我有一个像这样的简单函数,我期待着它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 结果。


查看完整回答
反对 回复 2021-10-14
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

尝试这个:

var b = await returnTrue()

附注。忘记 var - 阅读 const & let


查看完整回答
反对 回复 2021-10-14
  • 2 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信