Javascript 在节点js中的承诺内循环时停止
我正在处理一个问题,在这个问题中,我必须为用户生成一个唯一的id,但我无法找出如何打破承诺中的while循环。以下函数将查找具有相同引用id的用户是否存在,然后返回一个解析承诺Javascript 在节点js中的承诺内循环时停止,javascript,node.js,promise,bluebird,Javascript,Node.js,Promise,Bluebird,我正在处理一个问题,在这个问题中,我必须为用户生成一个唯一的id,但我无法找出如何打破承诺中的while循环。以下函数将查找具有相同引用id的用户是否存在,然后返回一个解析承诺 function makeRefId() { return new Promise(function(resolve , reject){ var refId = null; var flag = true; var tempUser ; do{ refId = ran
function makeRefId() {
return new Promise(function(resolve , reject){
var refId = null;
var flag = true;
var tempUser ;
do{
refId = randomId(); //this will return a random string
console.log(refId);
tempUser = User.findOneAsync({ref_id:refId}).then(function(user){
if(user == null)
{
flag = false;
resolve(refId);
}
});
}while(flag);
});
}
对于这个,我会使用递归函数。而循环不能很好地与承诺相结合,因为它们是异步的
function makeRefId() {
const refId = randomId();
return User.findOneAsync({ ref_id: refId }).then((user) => {
if (!user) {
return refId;
} else {
return makeRefId();
}
});
}
然后您可以这样使用它:
makeRefId().then(refId => {
// Do whatever with refId
});