承诺等待不同的结果
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的返回值传递给变量
为什么在第一个箭头函数的流动代码中我们得到 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的返回值传递给变量