隨着回調:
const makeRequest = (item, cb) => request({
uri: 'http://some.url/',
method: 'POST',
data: item
}, cb);
// 1. reverse() so that we can start building the callback chain from the end
// 2. Build up callback chain (starting with no-op function passed in as initial state
// to reduce) by returning a function which calls makeRequest() with the current item
// and passes the existing chain of callbacks to be called after that request finishes
const callbackChain = array.reverse().reduce((chain, item) => {
return() => makeRequest(item, chain);
},() => {});
callbackChain();
隨着承諾(需要request
承諾返流版本):
let promise = Promise.resolve();
// You can always attach more .then callbacks to an existing promise
for (let item of array) {
promise = promise.then(() => request({
uri: 'http://some.url/',
method: 'POST',
data: item
}));
}
或者與Array#reduce
:
const promise = array.reduce((promise, item) => {
return promise.then(() => request({
uri: 'http://some.url/',
method: 'POST',
data: item
}));
}, Promise.resolve());
一個選項:承諾。這裏是一個幫手方法:https://www.npmjs.com/package/promise-reduce – undefined
但是如何鏈接它們? @Ram – F1ks3r
這個藍鳥文檔頁面有一些例子:http://bluebirdjs.com/docs/api/promise.reduce.html請注意,reducer函數應該返回一個promise,如果請求不應該順序執行,你也可以使用'Promise.each'幫手。 – undefined