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

我有一个像这样的简单函数,我期待着它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


慕婉清6462132
浏览 183回答 2
2回答

慕哥9229398

从async函数上下文返回的任何值都包装在 Promise 中。在您的代码中,虽然您返回的结果await实际上等待of(true).toPromise()Promise 得到解决,但确实如此,但由于async函数上下文,已解决的值再次包装在承诺中。这在 MDN的async函数文档中有说明:async 函数声明定义了一个异步函数,它返回一个 AsyncFunction 对象。异步函数是通过事件循环异步操作的函数,使用隐式 Promise 返回其结果在使用的第二个代码中Observable,您使用的pipe运算符根据定义Observable在应用文档中的给定操作(在您的情况下为映射)后返回另一个:pipe(operations: ...*): Observable返回: Observable 所有已按传入顺序调用的运算符的 Observable 结果。

喵喵时光机

尝试这个:var b = await returnTrue()附注。忘记 var - 阅读 const & let
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript