Gal*_*puf 8 javascript async-await
我有以下示例中的两个问题:
为什么 x 在 y 之前记录?为什么是xa Promise?
我期待在它记录之前bar等待foo解决该值'Hello'然后返回它。
let foo = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Hello');
}, 2000);
})
}
let bar = async () => {
let y = await foo();
console.log(y);
return y;
}
let x = bar();
console.log(x);
Run Code Online (Sandbox Code Playgroud)
我期待看到的是
'Hello' // console.log(y)
'Hello' // console.log(x)
Run Code Online (Sandbox Code Playgroud)
我得到的是
Promise {<pending>} // console.log(x)
'Hello' // console.log(y)
Run Code Online (Sandbox Code Playgroud)
不应该bar等foo解决后再返回y吗?
任何帮助将非常感激!
您需要await该功能:
let example = async () => {
let foo = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Hello');
}, 2000);
})
}
let bar = async () => {
let y = await foo();
console.log(y);
return y;
}
let x = await bar();
console.log(x);
}
example();
Run Code Online (Sandbox Code Playgroud)
这里是关于文档async function:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
和Promise对象:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
据说 anasync function返回一个Promise对象,该对象在pending解析之前处于某种状态。
现在让我们看看你的代码:
您分配给x的返回值bar()a Promise,因为没有await停止执行的关键字(并且您不能添加一个,因为您在 a 之外async function)此承诺被记录为挂起,因为async function bar()尚未返回。
同时,在async function bar()你分配给y的返回值async function foo()也是 a Promise,但这次你让它等待结果。经过 2 秒的等待时间后,promise 实现并y记录了该resolve()方法的参数,即Hello.
因此,您目睹的行为是预期的行为。
| 归档时间: |
|
| 查看次数: |
5140 次 |
| 最近记录: |