JavaScript
Promise 与 for 循环的几个题
Promise 和 for 循环问题,循环需要上一次的结果 需要计算工序的时间,有开始时间,结束时间,下一道工序的开始的时间是上一道工序的结束时间,使用 promise 和 遍历实现 for 循环中的 promise 如何正确的 resolve promise 是异步的,需要到下一个 tick 才能执行 then,除非 break 或者 return,否则就是等 for 循环执行完毕才能 reso…
Promise 和 for 循环问题,循环需要上一次的结果 需要计算工序的时间,有开始时间,结束时间,下一道工序的开始的时间是上一道工序的结束时间,使用 promise 和 遍历实现 for 循环中的 promise 如何正确的 resolve promise 是异步的,需要到下一个 tick 才能执行 then,除非 break 或者 return,否则就是等 for 循环执行完毕才能 reso…
需要计算工序的时间,有开始时间,结束时间,下一道工序的开始的时间是上一道工序的结束时间,使用 promise 和 遍历实现
// reduce方法
var array = [1, 2, 3, 4];
var p = val => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(val);
resolve(val);
}, 1000);
});
};
var run = arr => {
return arr
.reduce((chain, val) => {
return chain.then(res => {
return p(val);
});
}, Promise.resolve())
.then(res => {
console.log('down');
});
};
run(array);
/*
每隔1s依次打印数组元素
1
2
3
4
done
*/
// 立即执行函数方法
var array = [1, 2, 3, 4];
var p = val => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(val);
}, 1000);
});
};
(async function() {
for (var i = 0; i < array.length; i++) {
let result = await p(array[i]);
console.log(result);
}
})();
/*
每隔1s依次打印数组元素
1
2
3
4
*/
// 错误的做法
function run(val) {
let m = { a: 1, b: 2 };
let n = {};
return new Promise((resolve, reject) => {
for (let key in m) {
n[key] = m[key];
resolve(n);
}
});
}
run().then(res => {
console.log(res);
});
// 预期{a:1},实际输出{a:1,b:2}
promise 是异步的,需要到下一个 tick 才能执行 then,除非 break 或者 return,否则就是等 for 循环执行完毕才能 resolve
// 正确的做法
function run(val) {
let m = { a: 1, b: 2 };
let n = {};
return new Promise((resolve, reject) => {
for (let key in m) {
n[key] = m[key];
return resolve(n);
}
});
}
run().then(res => {
console.log(res);
});
// 输出{a:1}
暂无评论
确认操作
请再次确认编辑图片
待上传图片 (剩余 0 张)
项目详情
确认评论邮箱
邀请制评论