人。我试图迁移用户,但承诺永远不会被调用。
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数组充满了函数,我查了一下。
答案 0 :(得分:0)
承诺数组充满了功能,但它没有充满承诺,因此它已经完成。
取而代之的是promiseArray.push(updateFunc(doc))