gpt4 book ai didi

javascript - 几乎所有地方都可以使用 async/await 吗?

转载 作者:数据小太阳 更新时间:2023-10-29 04:28:24 26 4
gpt4 key购买 nike

我目前正在编写供个人使用的小型 NodeJS CLI 工具,我决定尝试使用 Babel 的 ES7 async/await 功能。

它是一个网络工具,所以我显然有异步网络请求。我为 request 包写了一个简单的包装器:

export default function(options) {
return new Promise(function(resolve, reject) {
request({...options,
followAllRedirects: true,
headers: {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
}
}, (error, response, body) => {
if(error) {
return reject(error);
}
resolve({response: response, body: body});
});
});
}

现在我可以做类似的事情了

async function getGooglePage() {
try {
var r = await request({url: "http://google.com"});

console.log(r.body);
console.log("This will be printed in the end.")
} catch(e) {
console.log(e);
}
}
getGooglePage();

现在我有一个问题:我在很多地方做请求,我必须将所有这些功能标记为 async,这是一个好的做法吗?我的意思是我代码中的几乎每个函数都应该是 async,因为我需要 await 来自其他 async 函数的结果。这就是为什么我认为我误解了异步/等待概念。

最佳答案

async/await 有时被称为“传染性”或“病毒式”(或者在 C# 世界中如此),因为为了使其有效,它需要在调用链的整个过程中得到支持。强制某些异步行为同步可能会导致意想不到的结果,因此您应该将其从原始方法一直扩展到使用它的顶级消费者。换句话说,如果您创建或使用一个使用它的类型,该类型也应该实现它,依此类推。所以是的,您应该将异步添加到本身依赖它的每个函数。但是请注意,您不应该先发制人地向实际上并未实现或不需要它的函数添加异步。

想一想:如果您使用async(我的意思是通过await),您就是async。避免将 async 调用压缩为同步调用。

关于javascript - 几乎所有地方都可以使用 async/await 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35380162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com