javascript - Javascript Promises 不会像我期望的那样工作
问题描述
我试图理解承诺并在这里有点困惑。我正在玩不同的场景,我在其中一个上叠加。为什么不let third = function()
等待let second = function()
停止计数?
let first = function () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('first');
resolve()
}, 3000)
})
}
let second = function () {
return new Promise(function (resolve, reject) {
let iter = 7
console.log(iter);
for (let i = 0; i <= iter; i++) {
(function(n) {
setTimeout(function(){
console.log('hi');
console.log(n);
}, 400 * i);
}(i)*i);
}
console.log('seco');
resolve();
})
}
let third = function() {
return new Promise(function (resolve, reject) {
console.log('thir');
resolve()
})
};
let scenario = function() {
first()
.then(() => second())
.then(() => third())
}
scenario()
解决方案
setTimeout
不等待函数返回 - 它只是安排它稍后执行。调用setTimeout
立即返回,然后您的任务完成。
要等待预定函数在一定时间后执行,请resolve()
在延迟函数结束时调用。这样,promise 只会在预定函数执行后完成。
推荐阅读
- php - PHP - 转换对象后Json为空
- python - 为什么我的 Treeview 对象返回其项目的值之一而没有下划线?
- powershell - Grafana API 脚本创建新数据源失败
- python - argparse 库:PythonShell.py:错误:无法识别的参数
- routes - 除了上面的请求 DTO,有没有办法在其他地方声明路由?
- r - RM 功能不断出现在控制台上
- c# - Remove elements from List A that are in List B while keeping any duplicates in List A
- php - how to show warning of empty field on form validation?
- firebase - How to show just QuerySnapshots with boolean true in ListView? (Dart/Flutter)
- javascript - Asynchronous functions in an else block