是否可以在正常功能中使用等待?
例如:
function myFunction(v1, v2) {
let v3 = await some db operation; returns a array
console.log(v3);
//do something
};
答案 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.log
和console.error
处理返回的值和异常。)