javascript - 如何通过承诺检查异步函数何时完成执行?
问题描述
我有一个被另一个函数调用的异步函数。一旦异步函数完成执行,我想执行一些操作。我正在尝试使用承诺来做到这一点。我认为我在使用 Promise 的某个地方出错了。这是我的代码:
function foo(){
setTimeout(()=>console.log("hello world"),1000)
}
function bar(){
return new Promise(function(resolve){
resolve(foo())
})
}
bar().then(()=>console.log("foo has completed"))
即使在异步完成执行之前,控制台也会打印“foo has completed”。
解决方案
打电话解决是你应该自己做的事情。由于 foo 立即返回,因此您的承诺也立即得到解决。但是,如果满足您的要求,您可以执行以下操作。
function foo(resolve) {
setTimeout(() => {
console.log("hello world");
resolve();
}, 1000)
}
function bar() {
return new Promise(function(resolve) {
foo(resolve)
})
}
bar().then(() => console.log("foo has completed"))
推荐阅读
- excel - 自动将数据从 Xero 检索到 Excel
- jenkins - Jenkins 版本从 2.164.3 升级到 2.235.5
- plsqldeveloper - 是否有任何选项可以在 PL/SQL 开发人员中将文件(不带扩展名)打开为 sql 文件?
- angular - Kendo Angular Grid:反应形式值为空
- c++ - 犰狳 eigs_sym(A,k) 用于复稀疏矩阵 A
- flutter - 无法为具有非最终字段的类定义 const 构造函数 Flutter
- javascript - 浏览器应用程序上的安全 apikey 或令牌,例如 react
- facebook - Facebook Graph API,用于获取用户帖子、朋友和喜欢的计数
- javascript - 属性访问是如何工作的,以下行是做什么的?
- android - Android:另一个视图之上的透明视图