javascript / nodejs中的此语句是什么意思?就=>运算符和异步的意义而言,在这里等待关键字吗?

(1)这显然是散列密码的代码。但是,它在语法上究竟做了什么?为什么使用异步并以这种方式等待?和=>似乎没有定义函数。

const hashPassword = async password => await bcrypt.hash(password,10)

(2)如何在异步函数中返回值?我有一个异步函数返回一个数组,但是当被调用时它作为Promise对象被接收。

async function agentname() { 
  // ...
  return an_array;
}

let data = agentname();
console.log("in callback. data is " + data);

输出:

in callback. data is [object Promise]

我如何定义函数/返回值或如何调用函数是问题?

wkao0705120104 回答:javascript / nodejs中的此语句是什么意思?就=>运算符和异步的意义而言,在这里等待关键字吗?

  

这显然是散列密码的代码。但是,它在语法上究竟做了什么?为什么使用异步并以这种方式等待?和=>似乎没有定义函数。

确实定义了一个函数,并将hashPassword分配给该函数。与此相同:

const hashPassword = async function( password ) {
    return await bcrypt.hash( password,10 );
};

...或者这个(只是要清楚):

const hashPassword = async function( password ) {
    const hashedPassword = await bcrypt.hash( password,10 );
    return hashedPassword;
};

并在很大程度上(大部分情况下)与此相同:

async function hashPassword( password ) {
    const hashedPassword = await bcrypt.hash( password,10 );
    return hashedPassword;
}

...与此相同(忽略rej的错误处理):

function hashPassword( password ) {
    return new Promise( ( res,rej ) => bcrypt.hash( password,10 ).then( h => res( h ) )
}
  

如何在异步函数中返回值?我有一个异步函数返回一个数组,但是当被调用时它作为Promise对象被接收。

async注释函数时,它将返回值包装在Promise<T>中。由于在JavaScript中使用async函数时类型会在后台发生变化,因此我强烈建议使用TypeScript而不是JavaScript来避免此类错误。请注意,至少可以将await与Promise和非Promise函数一起使用。

在JavaScript中,这两个功能是等效的:

async function foo() {
    const v = await anotherAsyncFunction();
    return v;
}

function foo() {
    return new Promise( function(resolve,reject) {
        anotherAsyncFunction().then( v => resolve( v ) );
    } );
}

当一个函数返回一个Promise<T>时,您可以await来获取T,也可以使用一个then函数。

参见此处:How to return values from async functions using async-await from function?

本文链接:https://www.f2er.com/3160224.html

大家都在问