javascript - Javascript:如何从 Promise for 循环中返回一个值?
问题描述
在这个例子中如何返回 sum 的值?
function slowFunction(par) {
sum = 0
for (let i = 0, p = Promise.resolve(); i < 5; i++) {
p = p.then(_ => new Promise(resolve =>
setTimeout(function () {
sum += i ;
console.log(i);
resolve();
}, Math.random() * 1000)
));
}
}
解决方案
我不确定您在寻找什么,但这将是包装承诺的正确方法:
function slowFunction(par) {
return new Promise(resolve => {
var sum = 0
for (let i = 0; i < 5; i++) {
setTimeout(function () {
sum += i ;
resolve(sum);
}, Math.random() * 1000)
}
})
}
async function main() {
const i = await slowFunction()
console.log(i)
}
main()
不使用 asyc/await:
function slowFunction(par) {
return new Promise(resolve => {
var sum = 0
for (let i = 0; i < 5; i++) {
setTimeout(function () {
sum += i ;
resolve(sum);
}, Math.random() * 1000)
}
})
}
slowFunction().then(value => console.log(value))
推荐阅读
- spring - 如何允许用户在 Spring Boot / Spring Security 中仅访问自己的数据?
- r - 使用 here() 函数在根目录之上上一层
- haskell - 如何列出由 Haskell cabal 包安装的文件?
- r - 通过对 data.frame 中的另一列求和来创建月份列
- javascript - 将RequireJS与导出类一起使用时函数结果未定义
- php - 使用简单的 HTML DOM 或其他执行功能或单击外部页面?
- docker - Inkscape 尝试将 DXF 作为 SVG 打开
- python - 卷积神经网络内存使用
- c++ - 可以优化 lambda 按值捕获吗?
- pandas - pandas groupby:整体/总行?