javascript - 嵌套承诺解决方法
问题描述
在下面的代码中,当我调用 func 时,我得到了一个在 3 秒后解析的 promise,它解析为另一个 promise。再过 3 秒后,嵌套的 Promise 会解析为数字 43。我的问题是为什么 console.log 在 6 秒后返回 res:43 而不是在 3 秒后返回 unresolved promise。我 .then func2 但我从不 .then otherFunc
async function func(){
const val = func2().then((other)=>{console.log("res:"+other)})
}
async function func2(){
return new Promise(resolve => {
setTimeout(()=>resolve(otherfunc()),3000)
})
}
async function otherfunc(){
return new Promise(resolve => {
setTimeout(()=>resolve(43),3000)
})
}
解决方案
你func2
用另一个承诺解决otherfunc()
,所以func2
碰巧在 3 秒后解决,然后调用otherfunc
它也在 3 秒后解决。您在console.log
语句中看到的结果显示 43,因为.then()
将等待所有承诺完成。
推荐阅读
- php - PHP复选框返回值(选中/未选中)并更新
- javascript - Node JS 与 Spark 作业服务器的集成
- python-3.x - 编辑已经打开的网站 Selenium
- c# - 哪个 C# 编译器版本可以使用 CSharpCodeProvider 类编译 C# 7.3?
- javascript - TypeError:bot.commands.get 不是函数
- thingsboard - 按日期/时间安排操作
- windows - 如何使用 powershell 获取故障转移集群卷信息?
- powerbi - Power BI 报告服务器 - 门户管理员功能
- c# - .NET 未知主机名异常,但 nslookup 有效
- php - Messenger Chatbot:在实现人工交接协议的同时跟踪用户与机器人的聊天历史