【发布时间】:2015-09-26 16:26:17
【问题描述】:
我有以下代码:
function generateId() {
var id = Math.floor(Math.random()*1000);
var lastId = this.getLastAdvertId();
var self = this;
var promise = when.promise(function(resolve, reject) {
if(id === lastId) self.generateAdvertId();
if(lastId !== null){
self.compareImages(id, lastId).then(function(result){
if(result) self.generateAdvertId();
else{
self.setLastAdvertId(id);
resolve(id);
}
});
}
self.setLastAdvertId(id);
resolve(id);
});
return promise;
}
这段代码“有效”,我遇到的问题就在这部分:
if(lastId !== null){
self.compareImages(id, lastId).then(function(result){
if(result) self.generateAdvertId();
else{
self.setLastAdvertId(id);
resolve(id);
}
});
}
当两个图像相同时,结果为真,但没有生成新的 Id,而是返回了一个已生成的 Id。我在那里做错了什么?
【问题讨论】:
-
在您的第一个代码示例的第二行中分配的
id变量不会在代码中的其他任何地方修改。那是你所期待的吗。self.generateAdvertId是做什么的? -
问题是最终的
resolve(id)总是被执行,所以self.compareImages ...then中的resolve(id)不会改变完整的Promise的值,因为一个Promise只能被解决或拒绝一次- 看起来你应该做类似id = self.generateAdvertId();而不仅仅是self.generateAdvertId();的事情 - 但很难说
标签: javascript promise