承诺等待不同的结果

Promise await different results

为什么在第一个箭头函数的流动代码中我们得到 promise 解析值 some data 作为字符串,但在第二个箭头函数中我们得到 Promise { 'some data' } ?

const resolveAfter2Seconds = ()=> {
         return new Promise(resolve => {
            setTimeout(function() {
                resolve("some data");
            }, 2000);}
        );
    };

    (async()=>{
        let prom=await resolveAfter2Seconds()
        console.log(prom)
    })();



    (async()=>{
        let prom=resolveAfter2Seconds()
        await prom
        console.log(prom)
    })();

因为await prom不修改变量prom所指的内容,只是等待它所指的promise settle。 prom 登录时仍然指的是承诺。如果你想用 promise 的结果更新 prom,你需要明确地这样做:

prom = await prom;

如果你只是 运行 resolveAfter2Seconds(),那函数本身 returns 一个 Promise。所以 prom = resolveAfter2Seconds(); 将始终将 promise 作为变量的值。在resolveAfter2Seconds()前面写await,就是告诉JS等待函数返回的promise被resolved之后再设置变量,然后把promise的返回值传递给变量