這基本上是我的代碼,使用q:在另一個承諾調用承諾,有條件
let d = Q.defer();
let result = {
name: 'peter'
};
d.resolve(result);
return d.promise;
不過,我現在需要執行基於特定條件的一個步驟。這一步調用另一個也返回承諾的對象。所以我有嵌套承諾,如果這是正確的術語。
事情是這樣的:
let d = Q.defer();
let result = {
name: 'peter'
};
if (someParameter) {
otherService.getValue() // Let's say it returns 'mary'
.then((res) => {
result.name = res;
});
}
d.resolve(result);
return d.promise;
然而,這並不工作(在name
屬性仍是 '彼得')。可能是因爲我內心的承諾在以後的時間裏解決了?
我也試過這個,但它不起作用,如果我打電話給其他服務,它返回一個承諾。它確實工作,如果我只是設置的值:
let d = Q.defer();
let result = {
name: 'peter'
};
d.resolve(result);
return d.promise
.then((data) => {
if (someParameter) {
// Works
data.name = 'john';
// Doesn't work
otherService.getValue()
.then((res) => {
data.name = res;
});
}
return data;
});
這裏的名稱將是'約翰',而不是'瑪麗'。
很明顯,我誤解了承諾,但我無法把頭繞在它周圍。
看一看[在承諾的if-else流(http://stackoverflow.com/q/26599798/1048572) – Bergi