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

新手上路,请多包涵
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;
}

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

原文由 owl 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

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

首先,在节点中,你只有一个线程并且应该使用回调。您的代码会发生什么, 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 代码,也没有对此进行测试,但基本思想应该成立——不要使用繁忙的循环,并使用回调。您可能想看看节点异步包。

原文由 rafalio 发布,翻译遵循 CC BY-SA 3.0 许可协议

安装 NPM uuid 包(来源: https ://github.com/uuidjs/uuid ):

 npm install uuid

并在您的代码中使用它,例如使用 ES6 导入:

 import { v4 as uuidv4, v6 as uuidv6 } from 'uuid';

uuidv4();
uuidv6();

或者使用 CommonJS 需要:

 const {
  v1: uuidv1,
  v4: uuidv4,
} = require('uuid');

uuidv1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
uuidv4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'

为了

原文由 Vinz243 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏