ECMAScript 2018 引入 Promise.try,让 Promise 更加强大

阅读时长 4 分钟读完

ECMAScript 2018 引入 Promise.try,让 Promise 更加强大

在 JavaScript 中,Promise 是一种广泛使用的异步编程技术。Promise 最初引入时只有两个方法:resolve 和 reject。但是,随着 Promise 的发展,ES2018 引入了 Promise.try 方法,这个新的方法在 Promise 里更加强大。

Promise.try 方法是什么?

尽管 Promise 构造器函数很容易使用,但是有时候我们需要在 Promise 中处理异常或者使用 Promise 链来获取值。Promise.try 方法的目的就是为了使得这些操作更加容易。

Promise.try 方法接受一个函数作为参数。这个函数在 Promise 接受处理后被执行。如果函数返回的值是一个 Promise 对象,那么 Promise 将会等待 Promise 被解决再继续执行回调函数或 Promise 链,如果 Promise 被拒绝,后续的链式操作将会以该 Promise 的所触发的错误对象拒绝,如果函数是一个同步函数,它将帮你捕捉异常,所以你不需要手动的去 try...catch 捕获异常。

同时,Promise.try 也能正确地处理异步函数的结果。例如,如果函数在其中抛出异常,Promise.try会在Promise中捕获该异常。

Promise.try 有哪些优势?

例如,下面我们定义了一个函数,它只接受一个参数:

function doSomething(param) { return Promise.resolve(param); }

这个函数非常简单,只是简单地将传入的参数通过 Promise.resolve() 来转换成一个 Promise 对象,并返回此 Promise 对象。

现在,如果我们想对方法进行一些修改,以支持异常处理:将参数转换成字符串并返回,如果转换失败,则返回错误信息:

function doSomething(param) { try { const result = param.toString(); return Promise.resolve(result); } catch (err) { return Promise.reject(err); } }

这个实现看起来还是比较简单的。但是,当然还有更加简单的方法来实现相同的要求,那就是使用 Promise.try。

function doSomething(param) { return Promise.try(() => { return param.toString(); }); }

这个实现更加健壮而且更加简洁,它会自动捕获异常,你也无需在函数内部添加 try...catch。此外,如果你将 reject() 方法和 try...catch 混合应用,你将很容易编写出难以读懂的代码,但是使用 Promise.try 方法可以将这些问题消除掉。

如何使用 Promise.try?

Promise.try 的用法非常简单。只需把待执行的函数传递给 Promise.try 方法,并将所需参数作为一个参数传递给这个函数即可。

const value = "Hello World!"; const prom = Promise.try(() => { throw new Error("Something went wrong..."); return value; });

prom.catch(error => console.error(error));

在这个例子中,Promise.try 会尝试执行一个包含错误抛出语句的函数。当 Promise 被拒绝时,catch() 回调函数将被触发并返回错误信息。

Conclusion

Promise.try 方法是一个有用的新特性,它极大地简化了在 Promise 中捕获异常的流程,同时优化了异步编程。初学者可以通过这个方法更好的了解 Promise 的运行机制,并可以使代码更加简洁和容易维护。如果你想学习更多关于 Promise 的知识,我建议您查看 MDN Javascript文档,这里有更多的例子和用法。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b8683c306f20b3a6623be5

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试