【发布时间】:2018-05-09 23:00:21
【问题描述】:
我的问题与this 非常相似,但我无法让它工作:(
问题:
我有一个 Javascript 程序需要在 IE11 和 Chrome 中运行。
它有一个我需要按顺序执行的函数列表。
每个函数都返回一个 Promise。
Promise.all(promisesArray)可以“等待”直到所有功能完成后再继续。但它不保证每个函数都按顺序运行。这是必不可少的。我尝试过使用
Array.prototype.reduce(),但我无法弄清楚如何正确使用它。因为需要在IE11中运行,所以不能使用“箭头函数”之类的ES6特性。
这是我的代码:
<script>
var fn = function(arg) {
return new Promise (function (resolve, reject) {
console.log("fn(" + arg + ")...");
resolve("OK");
});
}
var p = fn("A").then(function(r) {
console.log("promise resolved: " + r + ".");
})
var chain = [];
chain.push(fn("3"));
chain.push(fn("1"));
chain.push(fn("2"));
console.log("Built chain:", chain);
Promise.all(chain);
chain.length = 0;
chain[2] = fn("30");
chain[1] = fn("20");
chain[0] = fn("10");
chain.reduce(function(promise, item) {
return promise.then(function() {
console.log("then:", item);
}), Promise.resolve();
});
console.log("Done.");
</script>;
我需要按顺序执行的函数array[0], array[1], array[2]。
【问题讨论】:
-
如果函数应该按顺序运行,或者承诺应该按顺序解析,不要使用
Promise.all。 -
IE11 不支持 Promises。你在使用 Promise 库吗?为什么不使用转译器,这样您就可以同时使用 Promises 和 for...of 循环?
-
就在
5. "Because I need to run in IE11, I can't use ES6 features like "arrow functions"这一点上——箭头函数无关紧要,它们只是一种新语法,可以使用例如babljs轻松转换 -
@NathanPower - 编译器不会给你承诺 - 我知道这不是你的意思,但它有点像这样