2016-03-16 62 views
0

我發現了一個有趣的環回問題。當我使用findOrCreate添加記錄時,我很困惑。讓我們來看看這個例子:findOrCreate在Loopback模型中

for (var x = 0; x < 10; x++) { 
    console.log(x); 
    var Log = app.models.Log; 
    Log.findOrCreate({ 
     where: { 
     modelName: '123' 
     } 
    }, { 
     modelName: '123' 
    }, function(err, log) { 
     if (err) return; 
     if (log) { 
     console.log("+ " + log.id); 
     } 
    }); 
    } 

我覺得應該建立1個紀錄modelName「123」而已,但我得到了10最後。

有什麼問題嗎?

回答

0

這是預期的。您正在同步運行代碼。如果以異步方式運行它,則只會看到一個正在創建的文檔。試試這個:

var arr = new Array(10); 
async.eachSeries(arr, function (pos, callback) { 
    console.log(pos); 
    Log.findOrCreate({ 
     where: { 
     txt: '123' 
     } 
    }, { 
     txt: '123' 
    }, function (err, log) { 
     if (err) return; 
     console.log("+ " + log.id); 
     callback(); 
    }); 
    }, function (err) { 
    if (err) { 
     throw err; 
    } 
    } 
); 
+0

你是明星!非常感謝!! – Marshall

+0

你確定.findOrCreate()需要哪裏鍵過濾器對象? 如果我用 '.findOrCreate({其中:{key:'value'}})' 那麼創建的對象不包含指定的值,它是空的。 但如果我使用 '.findOrCreate({key:'value'})' 一切似乎都是正確的。 在這兩種情況下,數據庫中的堅韌項目都能正確存儲。 – Kpihus

+0

@Kpihus請看這篇文章,詳細討論這個問題:https://github.com/strongloop/loopback-datasource-juggler/issues/766 – qais