就像之前所说的,promise能够将同步代码包装成异步的形式。然而,如果你经常写出如下的代码:
new Promise(function (resolve, reject) {
resolve(someSynchronousValue);
}).then(...);
你可以使用Promise.resolve()将上述代码精简。
Promise.resolve(someSynchronousValue).then(...);
在捕获同步异常的时候这个做法也是很有效的。我在编写API的时候已经养成了使用Promise.resolve()的习惯:
function somePromiseAPI() {
return Promise.resolve().then(function () {
doSomethingThatMayThrow();
return 'foo';
}).then(...);
}
记住,有可能抛出错误的代码都有可能因为错误被吞噬而对你的工作造成困扰。但是如果你用Promise.resolve()包装了代码的话,你永远都可以在代码后面加上catch()。
相同的,使用Promise.reject()可以立即返回一个状态为rejected的promise对象。
Promise.reject(new Error('some awful error'));
这个是我要记笔记,却发成问题了.