2014-11-06 104 views
0

我有两个猫鼬模型来控制每个模型的mongo动作。从索引路由我打电话给我的一个模型的函数,当第一个模型完成时,我想从另一个模型调用一个函数。 假设如下:如何使用q承诺?

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的,然后从saveUser ThingOneSchema。当我尝试将它应用到我的程序中时,我发现Q有点令人困惑。通常的例子采取doSomething(result).then(function(result)) 的形式,但我很难看到q是如何被调用的。

回答

0

如果你想链中的承诺如下

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

确保功能doSomething返回一个承诺。

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

然后,你callback其传递给then将参数以后被称为some_result

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

这是另外一组examples,它处理承诺时捕捉到常见问题。