【发布时间】:2018-11-17 12:44:51
【问题描述】:
我在尝试调用数组内的异步函数链时遇到问题。当我单独调用该函数时,它可以正常工作,如下例所示:
function consoleAll(string) {
return new Promise(function (resolve) {
console1(string).then(function () {
console2(string).then(function () {
resolve();
});
});
});
}
function console1(value) {
return new Promise((resolve) => {
console.log(value + "1");
resolve()
});
}
function console2(value) {
return new Promise((resolve) => {
console.log(value + "2");
resolve()
});
}
consoleAll('value-')
在这种情况下,结果是正确的:
value-1
value-2
但是当它在循环中传递时,它不会正确地使线程并完全无序地调用函数
function consoleAll(string) {
return new Promise(function (resolve) {
console1(string).then(function () {
console2(string).then(function () {
resolve();
});
});
});
}
function console1(value) {
return new Promise((resolve) => {
console.log(value + "1");
resolve()
});
}
function console2(value) {
return new Promise((resolve) => {
console.log(value + "2");
resolve()
});
}
//Call
['h1-', 'h2-', 'h3-'].forEach(function (string) {
consoleAll(string)
});
这次不是写下面的结果:
h1-1
h1-2
h2-1
h2-2
h3-1
h3-2
它输出这个:
h1-1
h2-1
h3-1
h1-2
h2-2
h3-3
看起来它为整个数组调用了console1函数,然后调用了console2。
有人知道打这个电话的正确方法吗? PS。我不在乎是否需要安装一些插件来解决这个问题。
【问题讨论】:
-
这段代码使用了 Promise 构造函数反模式...
标签: javascript node.js loops asynchronous promise