javascript 返回新的 Promise : short syntax

标签 javascript es6-promise

当使用异步 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/

相关文章:

javascript - 如何使用 JavaScript 访问下面构造的 HTML 对象

javascript - 用 span 包裹每个字符,但保持 HTML 格式

javascript - javascript的同步性

javascript - Promise.all 中的多个 fetch() - 哪个失败了?

javascript - 解决 promise 数据

javascript - 附加 html 中的事件触发问题?

javascript - 如何检索用户浏览器中当前网页的高度和宽度?

javascript - Async/Await 未按照 for 循环语句的预期工作

javascript - 为什么这个 map reduce Promises 数组不起作用,但只是减少它呢?

javascript - 返回 Promise/具有 .then() 方法的 ES6 类?