Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 退货承诺_Node.js_Object_Promise_Return - Fatal编程技术网

Node.js 退货承诺

Node.js 退货承诺,node.js,object,promise,return,Node.js,Object,Promise,Return,每当我试图从crypto或nanoid(新库)生成随机密钥时,它只返回[object Promise] async function createCode(length){ if(!length){ return nanoid; } else { return nanoid(length); } } // another one for example async function createCode(){ return await crypto.random

每当我试图从crypto或nanoid(新库)生成随机密钥时,它只返回[object Promise]

async function createCode(length){
  if(!length){
    return nanoid;
  } else {
    return nanoid(length);
  }
}

// another one for example
async function createCode(){
  return await crypto.randomBytes(64).toString('hex');
}

默认情况下,异步函数返回承诺。请在另一个异步函数中调用wait createCode(),或使用createCode()。然后()

所有异步函数返回一个承诺。总是

因此,异步函数的调用方必须使用
等待
自身(从另一个
异步
函数中)或使用
.then()
从承诺中获取值

在我看来,这两个函数都没有从异步中获益
return wait someFunc()
someFunc()
返回时,可以使用相同的
return someFunc()
来完成承诺。根本不需要等待

仅供参考,
crypto.randomBytes()
如果需要异步版本,将使用回调。如果不向它传递回调,那么它只是一个普通的同步函数。除非您已经做了一些事情来制作该库的预期版本,否则它不会返回承诺

所以,你可以用这个:

// another one for example
function createCode(){
  return crypto.randomBytes(64).toString('hex');
}
您可以将其作为常规函数调用:

let randomVal = createCode();
console.log(randomVal);
如果您想要异步版本并希望将其与承诺一起使用,那么您必须承诺:

// another one for example
function createCode(){
  return new Promise((resolve, reject) => {
       crypto.randomBytes(64, function(err, val) {
           if (err) return reject(err);
           resolve(val.toString('hex'));
       });
  });

}
然后,你可以称之为:

 createCode().then(val => {
     console.log(val);
 }).catch(err => {
     console.log(err);
 });