【发布时间】:2016-09-22 00:20:37
【问题描述】:
这基本上是我的代码,使用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 属性仍然是 'peter')。可能是因为我内心的承诺在稍后的时刻得到解决?
我也试过这个,但是如果我调用 otherService 返回一个承诺,它就不起作用。如果我只是设置值,它确实有效:
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;
});
这里的名字是“john”,而不是“mary”。
显然我误解了承诺,但我无法理解它。
【问题讨论】:
标签: javascript promise q