当使用异步 javascript 时,每个第二个函数看起来像这样:
function_name()
{
return new Promise((resolve,reject) => {
// do some async task
resolve();
});
}
即使使用 es6 async/await,我也无法避免“return new Promise((resolve,reject) => { ...”部分。
有没有另一种方法可以不用那些重复的行来编写这样的代码?
谢谢。
最佳答案
首先,您应该避免 promise anti-pattern在已经返回 promise 的其他函数周围包装一个新的 promise 。如果你正在这样做,那么你可以完全停止这样做,只返回异步操作已经创建的 promise 。这将立即简化事情。
如果您有未 promise 的旧式基于回调的操作,那么一般来说,您应该只 promise 基本异步函数一次,然后仅使用返回 promise 的函数版本进行编码。然后,您的所有逻辑流都使用 promises,您将不会在常规代码流中看到 new Promise(...)
样板文件。
此外,如今您通常可以避免手动 promise 。如果您使用的是 node.js,则 util.promisify()
可用于创建遵循 node.js 调用约定的任何异步函数的 promise 版本。
或者,如果您使用 Bluebird promise 库,您可以使用 Promise.promisify()
来 promisify 一个单独的函数,或者您可以使用 Promise.promisifyAll()
.
使用这些替代方法中的任何一种都可以避免您似乎反对的样板。
但是,如果您打算自己从头开始手动 promise 每个函数并且不使用任何其他辅助函数,那么就无法避免 new Promise(...)
句法。这就是它所需要的。
因此,您的大部分编码不应涉及 new Promise(...)
。如果是,那么您需要向我们展示一些示例,我们可以建议更好/不同的编码方式。
关于javascript 返回新的 Promise : short syntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48570783/