【发布时间】:2014-12-16 10:30:31
【问题描述】:
我正在尝试使我的猫鼬模型使用 Q 承诺异步保存。 当我使用 Q.nfcall 或使用 Q.defer() 连接时,我看到传递给我的承诺的结果对象的行为有所不同
值得注意的是,当使用 Q.defer() 时,我能够访问结果对象的所有属性,就像使用本机回调函数一样。 但是,当使用 Q.nfcall 时,所有属性都是未定义的。 更令人费解的是,记录这两个对象,我可以看到打印出来的整个 json 字符串。
这是代码(在咖啡脚本中)
Customer = new models.Customer({name: 'John Doe'})
console.log 'Customer.id' + Customer.id
deferred = Q.defer()
Customer.save((error, value) ->
deferred.resolve(value)
)
deferred.promise.then((customer) ->
console.log 'Deferred::customer.id: ' + customer.id
console.log 'Deferred::customer.name: ' + customer.name
console.log 'Deferred::customer: ' + customer)
Q.nfcall(Customer.save.bind(Customer)).then((customer) ->
console.log 'Qnfcall::customer.id: ' + customer.id
console.log 'Qnfcall::customer.name: ' + customer.name
console.log 'Deferred::customer: ' + customer)
这是输出
Qnfcall::customer.id: undefined
Qnfcall::customer.name: undefined
Qnfcall::customer: { __v: 0, name: 'John Doe', _id: 54461d5523867cc087ef4374 },0
Deferred::customer.id: 54461d5523867cc087ef4374
Deferred::customer.name: John Doe
Deferred::customer: { __v: 0, name: 'John Doe', _id: 54461d5523867cc087ef4374 }
我看不出我在这里做错了什么。任何帮助都非常感谢!
【问题讨论】:
标签: node.js mongodb coffeescript mongoose q