node.js - 节点替代 grunt 异步功能
问题描述
我正在尝试用一些普通的节点代码替换一些非常旧的 grunt 代码。
一些函数done = this.async()
用来提供一个句柄,你可以用它来表示工作已经完成。
我将如何用节点代码替换它?
解决方案
我认为您最好的方法可能是使用从 ES2017 / Node.js 7.6 开始可用的 async/await 功能。这不会像 done = this.async() 模式那样将异步函数转换为同步函数,但它允许看起来像异步的函数调用。
必须进行的一项修改是调用函数(在本例中为 testGetResult)必须标记为async。
例如,假设您有这样的函数:
function getResult() {
var done = this.async();
asyncCall(function(result) {
done(result);
})
}
我们将替换为:
function getResult() {
return new Promise(function(resolve, reject) {
asyncCall(function(result) {
resolve(result);
});
})
}
/* Example of an asynchronous function called by someFunction. */
function asyncCall(callback) {
setTimeout(callback, 1000, { status: 42 } );
}
async function testGetResult() {
/* Make getResult _look_ like it is synchronous. */
let result = await getResult();
console.log('result: ', result);
}
testGetResult();
如果您要尝试保持当前使用的确切语法,我认为您必须编写一些非常时髦的代码来以某种方式阻止函数的执行(例如 getResult),直到调用 done() 函数。
推荐阅读
- docker - 无法使用 docker run -e 或 --env-file 选项设置环境变量
- javascript - 个人资料查找(freecodecamp)挑战
- git - 远程:此存储库当前大小为 1.1 GB。如果超过 2 GB,它将进入只读模式
- mongodb - 如何在monodb中使用我们可以在mysql中使用sql .select count(*), count(distinct(name)) from tt
- python - 无法将 Pandas Dataframe 列转换为浮点数
- javascript - 如何设置画一条线连接堆栈栏
- gzip - Netty GZIP 解码器随机停止解码/解压缩
- c# - 如何在 WPF 中呈现大小可以自动增长的 HTML 内容?
- reactjs - this.setState() 不是函数
- sql - 在我的 SELECT 语句上使用 EXCEPT 时出错