簡體   English   中英

使用bluebird Promises,我該如何做一個嵌套的?

[英]Using bluebird Promises, how can I do a nested each?

我有2個數組,我想對它們的每個組合進行處理。 例如:

var array1, array2;

array1 = [1, 2, 3];

array2 = [4, 5, 5];

async.each(array1, function(val1, cb1) {
  return async.each(array2, function(val2, cb2) {
    return doProcessing(val1, val2, function(err) {
      return cb2(err);
    });
  }, function(err) {
    return cb(err);
  });
}, function(err) {
  return console.log('DONE');
});

我如何使用藍鳥承諾來做到這一點?

我在這里使用async模塊,因為doProcessing是異步調用。

首先,關於doProcessing承諾是:

process = Promise.promisify(doProcessing);

如果您已經包含了bluebird,則在這種情況下使用回調是沒有意義的。 現在,它返回了一個承諾,您可以輕松地使用它。 至於問題的另一部分,則需要所有對-您可以將其重構為異步嵌套的for循環:

return Promise.each(array1, function(val1){
     return Promise.each(array2, function(val2){
          return process(val1, val2);
     });
}).then(function(){
    // all done
});

請注意,如果數組僅包含數字,則進行正常循環而不是諾言-如果值本身是從異步源獲取的,則每個數組在這里都很有用。

另外,這是Ramda的一種更實用的方法:

var all = Promise.all.bind(Promise);
var wait = R.compose(all, R.map(all), R.xprod);
wait(arr1, arr2).map(R.apply(process));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM