javascript - 承诺中的 SetInterval。为什么这个承诺会立即解决?
问题描述
我试图了解承诺是如何运作的
let promise = new Promise( (resolve, reject) => {
alert("started");
let num = 0;
let interval = setInterval(() => {
alert(`state ${num}`);
num += 2;
if (num > 4) {
clearInterval(interval);
alert("finished");
resolve()
}
}, 1000)
});
promise.then(alert('resolved'))
由于某种原因,我立即看到警报started
,resolved
然后以 1 秒的间隔state 0
,和。
为什么承诺会立即解决?如何防止承诺在直接执行之前解决?state 2
state 4
finished
resolve()
解决方案
.then
接受函数作为参数,而不是简单的语句或表达式(除非所述表达式计算为函数)。改用这个:
promise.then(() => console.log('resolved'))
演示:
let promise = new Promise( (resolve, reject) => {
console.log("started");
let num = 0;
let interval = setInterval(() => {
console.log(`state ${num}`);
num += 2;
if (num > 4) {
clearInterval(interval);
console.log("finished");
resolve()
}
}, 1000)
});
promise.then(() => console.log('resolved'))
推荐阅读
- javascript - 如何修复 Windows 10 上的 npm 模块的灌输问题,包括 node-pre-gyp?2019
- node.js - 不能让我的脚本继续点击,直到没有剩余
- c - 使用带有随机端口的套接字将客户端绑定到服务器
- vue.js - 创建所有使用相同 api 并在不同组件中使用的全局过滤器函数——VUE.js
- apache-kafka - 卡夫卡不可恢复的滞后
- java - Elasticsearch Java API 创建索引与映射失败
- javascript - 我不能从函数中添加元素?
- ansible - 使用 ansible 安装 ansible Galaxy
- android - 无法进行android构建
- javascript - 应用于 HTML 元素的 JavaScript 动画问题