在节点js中的promise内循环停止

时间:2017-05-03 10:05:16

标签: javascript node.js promise bluebird

我正在研究一个问题,我必须为用户生成一个唯一的ID,但我无法弄清楚如何在Promise内部打破while循环。如果具有相同ref_id的用户存在,将会发现或不,然后给我一个坚定的承诺。

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);

});
}

1 个答案:

答案 0 :(得分:0)

为此,我要使用递归函数。虽然循环不能很好地与promises混合,但它们是异步的。

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
});