2017-08-23 9 views
0

人。私はユーザーを移行しようとしていますが、その約束は決して呼び出されません。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ソリューションで試してみましたが、どちらも動作しません。プロミス配列は関数でいっぱいです、私はそれをチェックしました。

答えて

0

約束事の配列は関数で満たされていますが、約束で満たされていないので、それは実現しています。

代わりに行うpromiseArray.push(updateFunc(doc))

+0

ああ、私はそれを完全に逃しました。ありがとう。 –

関連する問題