javascript - 在javascript中按顺序履行 promise

标签 javascript mongodb promise sequential

我一直在尝试使用 promise 来通过找到工作时间最少的人来实现分配人员轮类。为此,我使用聚合将每个人的可用性文档与包含他们上次工作时间的记录文档链接起来。它似乎跳过了与 promise 有关的整个代码部分,因为它将 selectedPeopleList 打印为空数组。这是我的代码:

var selectedPeopleList = [];

var sequentially = function(shifts) {

var p = Promise.resolve();

shifts.forEach(function (){
   p=p.then( function() { return collection.aggregate([
       {
          $lookup: 
            {
              from: "personRecord",
              localField: "ATTU_ID",
              foreignField: "ATTU_ID",
              as: "record"
            } 
        },

        {
          $match : { 'Available[]' : { $elemMatch : { $eq : shift.value } }, "record.ATTU_ID": { $nin : _.map(selectedPeopleList, 'ATTU_ID') } }
        },

        { 
          $sort : { "record.lastShift" : 1 }
        }
          ]).toArray(function(err, docs){ 
            assert.equal(err, null);

          }).then(function (result) {
            if(docs && docs.length) {
              selectedPeopleList.push({ ATTU_ID : docs[0].ATTU_ID, Name: docs[0].Name });
              console.log(docs[0]);
            }
          });
        });            
  })
  return p;
};
console.log(selectedPeopleList);

最佳答案

Promise 不会使异步代码同步

将最后一行更改为

p.then(function() {
    console.log(selectedPeopleList);
});

此外,您不需要在 forEach 中返回任何内容,因为根本不使用返回值

关于javascript - 在javascript中按顺序履行 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41819215/

相关文章:

javascript - 用同一网址上的新图片刷新图片

javascript - slider 内容随 slider 一起移动

node.js - Mongoose 查询填充查找元素的匹配 ID

javascript - ul li $(this).text() 什么也没显示

javascript - 传单圈子和点击事件加载新页面

mongodb - 将mongodb/mongodump中集合的指定字段导出到文件

mongodb - 使用组数获取 $group 结果

javascript - 解决未决的并行 promise

javascript - 在顺序循环中修改多个 Highcharts

grails - Grails异步响应呈现如何工作?