如何使用q承诺?

时间:2014-11-06 00:42:43

标签: node.js q

我有两个猫鼬模型可以控制每个模型的mongo动作。从索引路径我调用我的一个模型的函数我想在第一个模型完成时从我的其他模型调用一个函数。 假设如下:

ThingOneSchema = new Schema({ _id :String, name :String});
ThingOneSchema.statics.saveUser = function(thing, callback){
  ...do some stuff

ThingTwoSchema = new Schema({_id :String, property:String});
ThingTwoSchema.statics.doSomething = function(prop, callback){
  ... do some stuff

在我的索引调用中,我想从thingTwoSchema调用doSomething,然后从ThingOneSchema调用saveUser。当我尝试在我的程序中应用它时,我发现Q有点令人困惑。示例通常采用doSomething(result).then(function(result))的形式 但我不知道如何以这种方式调用q。

1 个答案:

答案 0 :(得分:0)

如果您想将承诺链接如下

doSomething(res).then(function callback(res) {
  //some stuff again
})

确保函数doSomething返回一个承诺。

function doSomething (res) {
   //do stuff..
   return Q(some_result);
}

然后,稍后会使用参数callback调用传递给then的{​​{1}}。

如果异步操作是基于回调而不是基于承诺,请确保已签出deferred。它允许你用Q promise包装那些异步调用。

这是另一堆examples,它在处理承诺时捕获了常见问题。