2014-11-06 101 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,它處理承諾時捕捉到常見問題。