Node.js 有没有办法在正常功能中使用wait?

Node.js 有没有办法在正常功能中使用wait?,node.js,Node.js,是否可以在正常函数中使用wait 例如: function myFunction(v1, v2) { let v3 = await some db operation; returns a array console.log(v3); //do something }; 不。异步编程的“魔力”——在JavaScript中,包括使用wait——在于它不会阻止其他代码的执行。如果您想使用它,您必须调整您的代码库,以便在有意义的地方使用async函数 如果您确实需要在正常的同

是否可以在正常函数中使用wait

例如:

function myFunction(v1, v2) {
    let v3 = await some db operation; returns a array
    console.log(v3);
    //do something
};
不。异步编程的“魔力”——在JavaScript中,包括使用
wait
——在于它不会阻止其他代码的执行。如果您想使用它,您必须调整您的代码库,以便在有意义的地方使用
async
函数

如果您确实需要在正常的同步函数中等待异步操作完成,则可以检查您正在使用的库是否也提供了
sync
函数(例如有)。但是,除非有很好的理由不这样做,否则请让您的代码异步。

不。异步编程的“魔力”——在JavaScript中,包括使用
wait
——是它不会阻止其他代码的执行。如果您想使用它,您必须调整您的代码库,以便在有意义的地方使用
async
函数


如果您确实需要在正常的同步函数中等待异步操作完成,则可以检查您正在使用的库是否也提供了
sync
函数(例如有)。但是,除非有很好的理由不这样做,否则请使您的代码异步。

不,而且有很好的理由

在引入异步函数之前:以下是完全可能的:

function foo() {
  var await = 42;
  var result = await + 42;
}
如果他们使
wait
在正常功能中可用,那么该代码将被追溯性破坏,导致所谓的向后兼容性破坏


这也是为什么
yield
仅在
函数*

中可用的原因,这是有充分理由的

在引入异步函数之前:以下是完全可能的:

function foo() {
  var await = 42;
  var result = await + 42;
}
如果他们使
wait
在正常功能中可用,那么该代码将被追溯性破坏,导致所谓的向后兼容性破坏


这也是为什么
yield
仅在
function*

Yes中可用的原因,所有异步代码都是从某个普通函数调用的,但是no您不能在非异步函数中使用
wait
关键字

异步函数在非异步函数中看起来像承诺

function myOuterFunction(v1, v2) {
    myFunction(v1, v2)
      .then(console.log)
      .catch(console.error);
}

async function myFunction(v1, v2) {
    let v3 = await some db operation; returns an array
    console.log(v3);
    //do something
};

(本例使用函数
console.log
console.error
来处理返回的值和异常。)

是的,所有异步代码都是从某个普通函数调用的,但是您不能在非异步函数中使用
等待
关键字

异步函数在非异步函数中看起来像承诺

function myOuterFunction(v1, v2) {
    myFunction(v1, v2)
      .then(console.log)
      .catch(console.error);
}

async function myFunction(v1, v2) {
    let v3 = await some db operation; returns an array
    console.log(v3);
    //do something
};

(本例使用函数
console.log
console.error
来处理返回值和异常。)

您应该向函数写入异步标志,以便执行需要在某个点产生执行的异步函数。因此,您要么编写一个可以等待的异步函数,要么使用承诺。无论哪种方式,您都不应该阻止线程等待异步操作,因为该操作将永远不会有机会执行。您应该将异步标志写入函数,以便执行需要在某个点产生执行的异步函数。因此,您要么编写一个可以等待的异步函数,要么使用承诺。无论哪种方式,您都不应该阻止线程等待异步操作,因为这样操作就永远不会有机会执行。