You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
somePromise().then(function(){thrownewError('oh noes');}).catch(function(err){// I caught your error! :)});somePromise().then(function(){thrownewError('oh noes');},function(err){// I didn't catch your error! :(});
var p = Promise.resolve();//Promise.resolve() 将现有对象转为Promise对象
同步与异步的混用
在Promise中,同步和异步同时调用可能会造成混乱,执行顺序如下所示:
Promise对象还是同步执行的,
.then
才是异步执行,所以先输出inner promise
对异步回调函数进行同步调用,还可能导致栈溢出或者异常处理错乱等问题。如果想在将来的某个时刻调用异步回调,可以使用setTimeout等异步API。
resolve和reject
当使用
then(resolveHandler, rejectHandler)
,rejectHandler
不会捕获在resolveHandler
中抛出的错误。var p = Promise.resolve();//
Promise.resolve()
将现有对象转为Promise对象Promise.resolve(Object)
转为Promise对象reject Error
对于
Promise
的reject
来说,如果抛出错误没有被捕获的话会报错,推荐总是使用.catch
捕获错误,而不要使用.then
的第二个参数来捕获,因为当使用promise.then(onFulfilled, onRejected)
的话在
onFulfilled
中发生异常的话,在onRejected
中是捕获不到这个异常的。.then
和.catch
都会创建并返回一个 新的promise
对象。由于.catch
方法是.then
的别名,我们使用.then
也能完成同样的工作。只不过使用.catch
的话意图更明确,更容易理解。The text was updated successfully, but these errors were encountered: