一尘不染

如何使用node.js生成唯一ID

node.js

function generate(count) {
    var founded = false,
        _sym = 'abcdefghijklmnopqrstuvwxyz1234567890',
        str = '';
    while(!founded) {
        for(var i = 0; i < count; i++) {
            str += _sym[parseInt(Math.random() * (_sym.length))];
        }
        base.getID(string, function(err, res) {
            if(!res.length) {
                founded = true; // How to do it?
            }
        });
    }
    return str;
}

如何使用数据库查询回调设置变量值?我该怎么办?


阅读 415

收藏
2020-07-07

共1个答案

一尘不染

自从使用node.js已经有一段时间了,但是我想我可以提供帮助。

首先,在node中,您只有一个线程,应该使用回调。您的代码将发生的情况是base.getID查询将排队等待执行,但是while循环将毫无意义地连续作为繁忙循环运行。

您应该可以通过以下回调来解决您的问题:

function generate(count, k) {
    var _sym = 'abcdefghijklmnopqrstuvwxyz1234567890',
    var str = '';

    for(var i = 0; i < count; i++) {
        str += _sym[parseInt(Math.random() * (_sym.length))];
    }
    base.getID(str, function(err, res) {
        if(!res.length) {
          k(str)                   // use the continuation
        } else generate(count, k)  // otherwise, recurse on generate
    });
}

并这样使用

generate(10, function(uniqueId){
  // have a uniqueId
})

我在大约2年内没有编写任何node / js的代码,也没有进行测试,但是基本思想应该成立-不要使用繁忙的循环,而应使用回调。您可能想看看节点异步包。

2020-07-07