我有一個函數foo(),其中包含一個可解析for循環的Promise。我想多次運行foo(),每次都給它不同的參數。然後,我想對所有這些結果做一些事情。將Promise.all()運行在for循環的結尾還是在foo()的所有Promise之後返回?或者它會說「這些foo()都不是諾言!」並嘲笑我?如何在for循環中創建Promise後使用Promise.all()
var foo = (x) => {
for (var i = 0; i < 100; i++) {
someOtherFunctionThatReturnsAPromise(x).then(returnSomething());
}
};
function nowDoEverything() {
return Promise.all([foo(1), foo(2), foo(3)]).then(doSomethingWithAllThoseReturnedValues());
}
nowDoEverything();
foo()是否需要返回一個Promise?如果是這樣,考慮到foo()中的Promise是在for循環內部生成的,我該怎麼做呢?
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all指出 「Promise.all(iterable)方法返回一個promise,當迭代參數中的所有promise都解決了,或者拒絕了第一個傳遞的promise的拒絕原因。
此視頻https://www.youtube.com/watch?v=RRgAdi3gX-s真的很擅長解釋基本的承諾,但我似乎試圖做一些建築師不打算/期望的事情。
太好了,謝謝!省略號(... foo(1))是什麼? –
@GlenPierce'...'punctuator可以傳播元素或rest元素,具體取決於用法,請參閱[ECMAScript文檔中的SpreadElement是什麼?它是否與MDN上的Spread運算符相同?](http://stackoverflow.com/questions/37151966/what-is-spreadelement-in-ecmascript-documentation-is-it-the-same-as-spread-oper) 。如果沒有擴展元素,那麼在數組中將會有三個或N次'foo'調用數組傳遞給'Promise.all()'中的'.then()'而不是單個數組。 'Promise.all([[1,2,3],[4,5,6]])。then(data => console.log(data)); Promise.all([... [1,2,3],... [4,5,6]])。然後(data => console.log(data))''。 – guest271314