Q.all不要从数组调用promises

时间:2017-08-23 09:12:32

标签: javascript node.js promise coffeescript q

人。我试图迁移用户,但承诺永远不会被调用。

  User = mongoose.model 'User'
  User.find({"hisId" : {$exists : true}}).exec (err, doc)->
    if err
      console.error err
      process.exit()
    if not doc or doc.length < 1
      process.exit()
    i = 0
    promiseArray = []
    while i < doc.length
      updateFunc = (doc) ->
        defer = Q.defer()
        User.update({
          "_id" : ObjectId(doc[i].juniorId)
          "friends.user": ObjectId(doc[i]._id)
        },{
          $set:
            "friends.$.canAdmin" : true
        }, (err, updateResult) =>
          if err
            console.error err
            defer.reject()
          defer.resolve()
        )
        return defer.promise
      updateFunc.bind(null, doc)
      promiseArray.push updateFunc
      i++
    Q.all(promiseArray).then(->
      console.log 'Why did get here before promises all fulfilled?'
    ).done ( ->
      process.exit()
    )

我尝试使用Q.promise解决方案,但它也不起作用。 Promise数组充满了函数,我查了一下。

1 个答案:

答案 0 :(得分:0)

承诺数组充满了功能,但它没有充满承诺,因此它已经完成。

取而代之的是promiseArray.push(updateFunc(doc))