node.js - 在 Node.js 7.6+ 中是否有任何可能的方法可以使用内置的等待而无需异步?

标签 node.js asynchronous async-await

我是一名 Node.js 程序员。在 Node.js 7.6 发布之前,我使用了模块' asyncawait ' 让我的代码处于异步等待风格。编码风格如下:

var async = require('asyncawait/async');
var await = require('asyncawait/await');

var getData = async(function(finder){
    return await(db.collection.findOne(finder));
});

var f = function(finder){
    return await(getData(finder));
};

try{
    let result = f({id: 1});
}catch(err){
}

Node.js 7.6发布后,正式内置了async-await功能。但是 async 和await 函数(或者称它们为关键字?)似乎必须在一个函数中配对。如果我将代码更改为,

var getData = async function(finder){
    return await db.collection.findOne(finder);
}

var f = function(finder){
    return await getData(finder);
};

try{
    let result = f({id: 1});
}catch(err){
}

无法识别“f”函数中的“await”关键字。除非我将代码更改为,

var getData = async function(finder){
    return await db.collection.findOne(finder);
}

var f = async function(finder){
    return await getData(finder);
};

try{
    let result = await f({id: 1});
}catch(err){
}

代码会很乏味。有没有可能在函数中使用内置的等待而不使用异步?

最佳答案

Await 只能在异步函数内使用。

The await expression causes async function execution to pause, to wait for the Promise's resolution, and to resume the async function execution when the value is resolved. It then returns the resolved value. If the value is not a Promise, it's converted to a resolved Promise.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

关于node.js - 在 Node.js 7.6+ 中是否有任何可能的方法可以使用内置的等待而无需异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43066000/

相关文章:

Python 异步和 CPU 密集型任务?

javascript - 仅在另一个脚本完成后才运行另一个脚本

java - vertxexecute阻止不同的行为

c# - 顶级请求上的 ConfigureAwait(false)

c# - 依赖注入(inject)的 UserManager 正在处理异步调用 (ASP.NET CORE)

javascript - 获取css文件中的所有类名

node.js - MongoDB watch() 使用 NodeJS 和 Mongoose 观察数据库中的变化

node.js - 通过批处理脚本获取 Node 版本

node.js - Node.js 和 Kakashi 中的日语音译

c# - 使用 async/await 和 System.Threading.Tasks.Parallel 时出现奇怪的执行跳转