2015-11-19 75 views
0

我對我的角度項目和seed.js有問題。我已準備好日期,但我在類別和產品之間的數據中存在關係。我需要創建分類對象,所以我寫了一個函數:seed.js - Kriskowal Q不會解決承諾?爲什麼?

function getCategory(name) { 
    var deferred = q.defer(); 
    var promise = Category.findOne({'name': name}).exec(); 
    deferred.resolve(promise); 
    console.log(promise); 
    console.log(deferred.promise); 
} 

,但我發現:

Promise { 
    emitter: 
    EventEmitter { 
    domain: null, 
    _events: {}, 
    _eventsCount: 0, 
    _maxListeners: undefined }, 
    emitted: {}, 
    ended: false } 
{ state: 'pending' } 

有什麼建議嗎?

回答

0

如果您用另一個承諾解決了承諾,那麼第一個保留在掛起狀態,直到第二個承諾解決。 不過不用擔心,它連接,你可以通過使用then功能訂閱承諾的分辨率確保:

var deferred = Q.defer(); 

// var promise = Category.findOne({'name': name}).exec(); 
var promise = new Promise(resolve => { // imitating an asynchronous task, like exec() 
    setTimeout(() => resolve('#1'), 1); 
}); 
deferred.resolve(promise); 

console.log(promise); // logs: Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined} 
console.log(deferred.promise.inspect()); // logs: Object {state: "pending"} 
deferred.promise.then(x => { console.log(x); }, e => { console.error(e); }); // Prints "#1" after the promise resolves 

順便說一句,我不明白了一個道理,爲什麼這樣做。 MongooseJS's exec function already returns a standard promise,你基本上只是複製那一個。

+0

等一下。我遇到了阿甘,但我不知道爲什麼;)Meybe我重新開始。我有兩個集合一個是類別,第二個是現在我需要將Book文檔鏈接到Category文檔。在模型中我使用: 類別:{ 類型:Schema.Types.ObjectId, 裁判:「類別」 }, 現在我需要解決所選類別的承諾和投入有category._id; Meybe有沒有最簡單的方法來做到這一點? –

+0

你能否用這個新的信息更新你的問題?如果你提供了更多的代碼來查看出了什麼問題,這將會很有幫助。 –