javascript承诺作为参数传递的所有值数组

时间:2018-05-08 23:44:26

标签: javascript arrays callback promise

给出以下数组值:

var sportList = ['football', 'volleyball'];

我想使用以下每个值在mongo数据库上运行查询:

function myFunc(sport, callback) {
  mongoDB.sports.find({'name': sport}, function (error, result) {
    if (error) {
        callback(error)
    } else {
        callback(null, result)
    }
  })
}

所以我建立了我的承诺,如:

var promises = sportList.map(function(val){
    return myFunc(val);
});

然后尝试在promise all chain中运行all:

Promise.all(promises)
        .then(function (result) {
            console.log('log results: ', result);
        })
        .catch(function (error) {
            console.log(error);
        });

但这不起作用,因为它抱怨callback未定义,我该如何正确解决这个问题?

1 个答案:

答案 0 :(得分:2)

错误的原因是您在不提供myFunc参数的情况下调用callback方法。

解决方案是用以下代替myFunc函数。此函数将返回新的Promise。我没有测试下面的代码,但它应该工作。

function myFunc(sport) {
  return new Promise((resolve, reject) => {
    mongoDB.sports.find({'name': sport}, function (error, result) {
      if (error) {
          reject(error);
      } else {
          resolve(result);
      }
    })
  }));
}