Javascript 生成一个唯一的id
我有以下代码:Javascript 生成一个唯一的id,javascript,promise,Javascript,Promise,我有以下代码: 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
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);
}
});
}
当两个图像相同时,结果为true,但没有生成新Id,而是返回生成的Id。在那里我可能会做错什么?在不知道
self.generateAdvertId
和self.compareImages
函数的细节的情况下,我只能猜测这是您需要做的
我假设self.generateAdvertId
将返回一个id
——否则你的代码就没那么有意义了——同样,仅仅看到一个片段可能就是原因
function generateId() {
var id = Math.floor(Math.random()*1000);
var lastId = this.getLastAdvertId();
var self = this;
if (id === lastId) {
id = self.generateAdvertId();
}
if (lastId !== null) {
return self.compareImages(id, lastId).then(function(result){
if (result) {
id = self.generateAdvertId(); // your original code looked like you (incorrectly) expected it to fall through to the setLastAdvertId/resolve at the bottom of the function,
}
self.setLastAdvertId(id);
resolve(id);
}); // this returns a promise
}
self.setLastAdvertId(id);
return when.resolve(id); // return a promise with the resolved value = id
}
在第一个代码示例的第二行中指定的
id
变量不会在代码中的任何其他位置进行修改。这就是你所期待的吗。self.generateAdvertId
有什么作用?避免!问题是最终的resolve(id)
总是在执行,因此self.compareImages中的resolve(id)
将不会更改完整承诺的值,因为承诺只能解决或拒绝一次-看起来您还应该执行类似id=self.generateAdvertId()的操作代码>而不仅仅是self.generateAdvertId()代码>-但很难说