使用异步 javascript 时,每个第二个函数如下所示:
function_name()
{
return new Promise((resolve,reject) => {
// do some async task
resolve();
});
}
即使使用 es6 async/await,我也无法避免“return new Promise((resolve,reject) => { …”部分。
有没有另一种方法可以在没有所有重复行的情况下编写此类代码?
谢谢。
原文由 David Vielhuber 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,您应该避免 promise 反模式,该模式将新的 promise 包装在已经返回 promises 的其他函数周围。如果你正在这样做,那么你可以完全停止这样做,只返回异步操作已经创建的承诺。这将立即简化事情。
如果您有未承诺的旧式基于回调的操作,那么一般来说,您应该只承诺基本异步函数一次,然后仅使用返回承诺的函数版本进行编码。然后,您的所有逻辑流程都使用 promises,您将不会在代码的常规流程中看到
new Promise(...)
样板。此外,现在您通常可以避免手动承诺。如果您使用的是 node.js,那么
util.promisify()
可用于创建遵循 node.js 调用约定的任何异步函数的承诺版本。或者,如果您使用 Bluebird promise 库,您可以使用
Promise.promisify()
来 promisify 一个单独的函数,或者您可以使用Promise.promisifyAll()
来 promisify 整个接口。使用这些替代方法中的任何一种都可以避免您似乎反对的样板。
但是,如果您要自己从头开始手动 promisify 每个函数并且不使用任何其他辅助函数,那么就无法避免
new Promise(...)
语法。这就是它所需要的。因此,您的大部分编码不应涉及
new Promise(...)
。如果是这样,那么您需要向我们展示一些示例,我们可以建议更好/不同的编码方式。