使用 promise 系列而不是异步系列

use promise series instead async series

我使用以下 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);
}

现在我想将它转换为蓝鸟 promise 我尝试了以下但延迟不起作用,我想我可能需要 Promise.delay 但不确定如何使用它...

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

首先你必须按如下方式承诺你的异步函数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))

您似乎在寻找

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').