在Normal函数中使用await的任何方法?

时间:2018-01-13 11:37:29

标签: node.js

是否可以在正常功能中使用等待?

例如:

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

3 个答案:

答案 0 :(得分:2)

不,并且有充分的理由。

在引入异步功能之前:以下完全可能:

function foo() {
  var await = 42;
  var result = await + 42;
}

如果他们已经使await在普通函数中可用,则该代码将被追溯性地破坏,导致所谓的向后兼容性中断

这也是yield仅在function*内可用的原因。

答案 1 :(得分:1)

否。异步编程的“神奇之处” - 在JavaScript中,包括await的用法 - 是它不会阻止其他代码的执行。如果您想使用它,您必须调整代码库以使用async函数。

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

答案 2 :(得分:0)

,所有异步代码都是从普通函数某处调用的,但是,您不能使用await非异步功能中的关键字。

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

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 a array
    console.log(v3);
    //do something
};

(此示例使用函数console.logconsole.error处理返回的值和异常。)