2017-07-26 60 views
-1

在「afterRemote」 -hook我想找到一個特定的模式,改變屬性:Loopback:PersistedModel.findById()不提供最終實例。像保存方法()不存在

Team.afterRemote('prototype.__create__messages', function(ctx, message, next) { 
    var Message = Team.app.models.message; 

    // Promises.all not required, just for debugging (i removed other code) 
    const promises = Promise.all([ 
     Message.findById(message.id), 
    ]) 

    promises.then(function(result) { 
     console.log("FOUND Message ", result); 

     // here i'd like to change an attribute and save the model back to database 
     console.log(typeof result.save); // will print undefined 
    }); 

我怎麼能操縱發現實體和保存呢?保存() - 方法不存在。總而言之,findById提供了一個普通的JSON對象,而不是一個真正的PersistedModel實例。

模型被定義爲:

{ "name": "message", "base": "PersistedModel", "strict": false, "idInjection": false, "options": { "validateUpsert": true },

數據庫是一個MongoDB的。

+0

'findById'實際上必須返回一個模型實例。 http://apidocs.strongloop.com/loopback/#persistedmodel-findbyid你應該在這裏記錄一個bug:https://github.com/strongloop/loopback/issues/new – Sterex

+0

啊,看起來像你有 - https:/ /github.com/strongloop/loopback/issues/3521 :) – Sterex

回答

1

解決方案:

console.log("FOUND Message ", result[0]); 
console.log(typeof result[0].save); 

根源:請看看Promise.all文檔

Promise.all是異步完成的。在所有情況下,返回的 承諾都通過數組滿足 作爲參數(也是非承諾值)傳遞的所有值。

所以你的情況,result是一個數組像[messageObject]

希望我的回答可以幫助:)

2

回送模型函數也支持promise。您的代碼可以重寫如下。

var Message = Team.app.models.message; 

Message.findById(message.id).then(function(result) { 
    console.log("FOUND Message ", result); 
    console.log(typeof result.save); 
}); 
相關問題