使用Javascript / ECMAScript 6等待多个承诺

时间:2015-04-30 20:31:27

标签: javascript promise es6-promise

我想启动一个promises列表并在完成所有操作后执行回调(没有async / await)。

2 个答案:

答案 0 :(得分:4)

我刚想通了。只需使用Promise.all:

function x(timeout) {
  return new Promise((resolve, reject) => {
    setTimeout(function() {
      resolve(timeout + ' done!');
    }, timeout);
  });
}

(function() {
  Promise.all([
    x(300),
    x(200),
    x(100),
  ]).then(([x300, x200, x100]) => {
    console.log(x100);
    console.log(x200);
    console.log(x300);
  });
})();

答案 1 :(得分:0)

是的,Promise.all是你的朋友。

const mongo = require('mongodb').MongoClient;
const uri = "mongodb://localhost:27017";

mongo.connect(uri, function (err, db) {
const dbo = db.db("readings");
if (err) {
    throw err;
};
console.log('MongoDB connected...')

function insertReading (data) {
    dbo.collection("myReadings").insertOne(data, function(err, res) {
        if (err) throw err;
        console.log("1 document inserted");
    });    
    };
});

exports.newReading = function(req, res) {
    insertReading(req.body)
};

exports.myDashboard = function (req, res) {
    console.log("test");
}

你没有使用async / await的任何原因我发现它真的简化了这种模式吗?

Promise.all([promise1, promise2]).then(([result1, result2]) => {})

https://www.dalejefferson.com/blog/async-await-promise-all-array-destructuring/