[英]Nested async/await functions
我试图了解如何以嵌套方式使用async/await 。 在示例中,我调用 function a(),在其中,我想调用 b() 并确保 b() 在 a() 之前解析。 以下是代码,虽然 b() 被调用,但它没有得到解决。
function a() { b(); return new Promise((resolve, reject) => { setTimeout(() => { resolve('resolved a'); }, 2000); }); } function b() { console.log('calling b'); return new Promise((resolve, reject) => { setTimeout(() => { resolve('resolved b'); }, 2000); }); } async function asyncCall() { console.log('calling'); const result = await a(); console.log(result); } asyncCall();
上面代码的output是:
“呼唤”
“打电话给b”
“解决了”(这条线在2 秒后出现)
然后,我更改了代码以在 a() 中包含 async/await,(其他一切都相同)
async function a() { await b(); return new Promise((resolve, reject) => { setTimeout(() => { resolve('resolved a'); }, 2000); }); } function b() { console.log('calling b'); return new Promise((resolve, reject) => { setTimeout(() => { resolve('resolved b'); }, 2000); }); } async function asyncCall() { console.log('calling'); const result = await a(); console.log(result); } asyncCall();
上面代码的output是:
“呼唤”
“打电话给b”
"resolved a" (这条线在4 秒后出现 [在前面的例子中是 2 秒])
但在这两种情况下,' resolved b ' 都没有被打印出来。
我有两个问题:
如何打印“已解决的 b”?
您的代码完全忽略了b
的解析值。 第一个示例完全忽略了 promise。 第二个示例等待 promise 解析,但对解析的值不做任何事情(甚至不将其捕获在变量中)。
您必须console.log()
它就像您记录的所有其他内容一样。
您可以logthisvalue = await b()
。 你可以b().then(logthisvalue => here)
。 您可以修改b()
以便它记录自己的值。
是否常见这样的情况:异步 function(在本例中为 function “a”)既是被调用者(它由 asyncCall() 调用)又是调用者(它正在调用 b())?
是的。
async
和await
关键字是管理 Promise 的工具。
顶级await
的支持很差,所以一般来说,您只能在async
function 中使用await
。
您必须调用async
function 才能执行任何操作。
async
function 必须让 promise 从某个地方await
,通常是通过调用另一个 function。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.