概念澄清:如何直接拿到promise的返回值

 之前自己写promise,链式调用,拿到than之后的返回值再赋值给全局变量。

今天看别人操作observable对象:

        const fuck = await this.fuckService
            .getFuckcode(fuckId)
            .toPromise();

想了想为什么直接赋值给fuck能拿到值。

要想操作Promise的返回值,可以使用async/await方法去操作,await可以拿到Promise的.then的返回值。但await方法必须要在async函数中使用。

而async本质就是一个Promise,其实你还在利用Promise操作Promise的值,只是这个方法简单易懂。

async 函数返回的是一个 Promise 对象。async 函数(包含函数语句、函数表达式)会返回一个 Promise 对象,如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。
 

await等到结果之后呢?

     await 等到了它要等的东西,一个 Promise 对象,或者其它值,然后呢?我不得不先说,await 是个运算符,用于组成表达式,await 表达式的运算结果取决于它等的东西。

    如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。

    如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。

    其实这就是 await 必须用在 async 函数中的原因。async 函数调用不会造成阻塞,它内部所有的阻塞都被封装在一个 Promise 对象中异步执行。
 

你可能感兴趣的:(JS,javascript,ecmascript,promise)