1
我有一些邏輯,我試圖建立一個「人」的對象,我有一個名爲getProvider
的方法,其中我基本上從mongo獲取提供者並將其指定爲person.provider
。承諾的退貨價值不是預期的
由於對mongo的調用是異步的,我試圖使用承諾。除了在我的.then
方法中,除了我已經記錄的值之外,該值似乎是正確的。它顯示{"source": {}}
,我不知道爲什麼。
這裏是我的輸出:
data =
MYPROVIDER
provider =
MYPROVIDER
after addProvider
{"source":{}}
...
configDone.promise.then(function() {
return addProvider();
}).then(function() {
console.log('after addProvider');
console.log(JSON.stringify(people[0].provider)); // SHOWS {"source": {}}. WHY IS IT DOING THIS?
callback(null, people);
}).fail(function (err) {
callback(err);
});
function addProvider() {
var promises = [];
people.forEach(function(person){
promises.push(person.provider = getProvider(person.id, db));
});
return Q.all(promises).spread(function(provider) {
console.log('provider = ');
console.log(provider); // SHOWS CORRECT PROVIDER HERE
});
}
// Gets a provider for a specific person id
var getProvider = function(id, db) {
var def = Q.defer();
db.collection('providerLists').findOne({id: id}, function (err, data) {
if (err) {
def.reject(err);
} else {
console.log('data = ');
console.log(data.ListName); // SHOWS CORRECT VALUE
def.resolve(data.ListName);
}
});
return def.promise;
}
我不希望提供者在人物陣列上,因爲每個人都有特定的提供者。那麼我將如何循環並分配這種方式? – Catfish 2014-09-29 18:27:34
'configDone.promise.then(函數(){ \t返回addProvider(); })。然後(函數(){ \t的console.log( '後addProvider'); \t的console.log(JSON.stringify (例[0] .provider)); \t \t \t患者[0]。然後(功能(提供者){ \t \t \t \t的console.log(提供商); \t \t \t}) \t回調(NULL,人); })。fail(function(err){ \t callback(err); (提供程序){console(0).provider.then(function(provider){console);}這樣會給出錯誤'Error:TypeError:Object#
@Catfish: .log(provider);})' - 單個病人確實不是承諾。 – Bergi 2014-09-29 18:39:31