使用promise系列代替异步系列

时间:2016-09-05 15:13:13

标签: javascript asynchronous promise bluebird async.js

我使用以下async.js代码

var arr = ['1', '2'];
async.mapSeries(arr, getInfo, (e, res) => {
  console.log(res);
});

function getInfo(name, callback) {
  setTimeout(() => {
    callback(null, name + ' from async');
  }, 500);
}

现在我想将它转换为bluebird promise并尝试以下但延迟不起作用,我想我可能需要和Promise.delay但不知道如何使用它...

Promise.mapSeries(arr, function(getInfo) {
  return getInfo + ' from promise'
}).then(function(results) {
  console.log(results)
});

2 个答案:

答案 0 :(得分:1)

你似乎在寻找

function getInfo(name) {
  return Promise.delay(500, name + ' from async');
}
Promise.mapSeries(arr, getInfo).then(results => {
  console.log(results)
});

或者你可以写Promise.delay(500).then(() => name + ' from async')

答案 1 :(得分:0)

首先,您必须按照以下方式宣传您的异步函数getInfo();



function promisify(fun){
  return (data) => new Promise((resolve,reject) => fun(data, (err,res) => err ? reject(err) : resolve(res)));
}

function getInfo(name, callback) {
  setTimeout(() => {
    callback(null, name + ' from async');
  }, 500);
}

var getInfoPromise = promisify(getInfo);

getInfoPromise("Mr. Promise").then(val => console.log(val))