【问题标题】:stop while loop inside a promise in node js在节点js中的promise内停止while循环
【发布时间】:2017-10-01 02:30:47
【问题描述】:

我正在解决一个问题,我必须为用户生成一个唯一的 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);

});
}

【问题讨论】:

    标签: javascript node.js promise bluebird


    【解决方案1】:

    我会为此使用递归函数。 While 循环不能很好地与 Promise 混合,因为它们是异步的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 2018-10-14
      • 2021-09-17
      • 2020-06-20
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多