【发布时间】:2018-07-02 22:06:11
【问题描述】:
我有几个函数返回一个承诺。
有一个启动函数执行另一个函数。
由于这些是承诺,而我正在使用 Promise.all,理论上,Promise.all 应该仅在所有其他承诺完成后才显示。
代码如下:
arr = [];
function start() {
var aPromiseMain = new Promise((resolve, reject) => {
myfunction();
arr.push('start');
resolve(console.log('I am start'))
})
return aPromiseMain
}
start();
function myfunction() {
var aPromise = new Promise((resolve, reject) => {
setTimeout(() => {
arr.push('I am myfunction');
resolve(console.log('I am myfunction'))
}, 2000)
})
return aPromise
}
Promise.all(arr).then(values => {
console.log(values);
});
发生的事情是顺序如下:
- 我开始了
- Promise.all 正在显示
- 我是
myfunction
应该是:
- 我开始了
- 我是
myfunction - Promise.all
我该如何解决这个问题?
【问题讨论】:
-
你永远不会将任何这些 Promise 值放入数组中;你只是在推动字符串。
-
问题是如果我将字符串添加到resolve('I am start');我只能传递一个,所以如果在同一个函数中我想在代码的不同部分传递 2 个不同的值,我会遇到问题
-
不不;返回的 Promise 实例都被忽略。这些是需要进入数组的东西,而不是字符串。它与您传递给
resolve()的内容无关。 -
您的实现不正确。 Promise.all 是你传递一系列承诺的地方。相反,您传递的是一个字符串数组。您不必为当前的实现使用 Promise.all。如果你想做承诺链,那么你可以使用 Promise.all。
-
所以基本上你只是在做
Promise.all([1,2,3]).then(console.log)
标签: javascript promise