本质上,Promise是返回一个对象,你可以在上面添加回调函数,而不像普通的回调那样,向函数传送回调函数。
Promise提供的保证:
1、
Promise的作用:
1、将我们从深层内嵌回调中解脱出来
// 深层内嵌回调函数,使用链式函数来摆脱深层的内嵌
doSomething(function(result) {
doSomethingElse(result, function(newResult) {
doThirdThing(newResult, function(finalResult) {
console.log('Got the final result: ' + finalResult);
}, failureCallback);
}, failureCallback);
}, failureCallback);
深层内嵌的缺点:
1、不能统一处理回调函数的异常
2、可读性差
2、提供了串行能力Promise.All(), Promise.rice()
3、异步执行能力。函数内嵌callback和Promise都能提供异步能力。
问题:
1、new Promise时,传入的函数是否必须是返回promise的
2、then中的函数是不是必须返回promise
3、多个then是否可以同时得到new Promise返回的值
4、异步执行变同步?
使用场景:
1、不能直接new Promise();
2、new Promise传入一个普通函数,函数得到执行,但then不会执行,因为Promise的状态一直是pending,没有发生改变
3、new Promise传入带有resolve,reject参数的函数,函数执行完成时调用resolve()触发状态改变,但没有返回值
4、new Promise时传入的函数参数名称没有限制,第一个参数代表resolve(函数执行成功),第二个参数代表reject(函数执行失败),只传入一个参数代表resolve。
5、如果触发reject(),then和catch不链式书写,then执行是会报错,catch能执行。如果链式书写then不执行,直接执行catch。
链式书写:
6、new Promise初始执行的函数的返回值,只能传递到第一个then,不能一直向下传播。then中需要返回promise对象,promise对象返回的值才能被下一个then读取。
7、then接收两个函数,一个是执行成功的回调函数,一个是执行失败的回调函数,catch=then(null,fail),但是then(null,fail)不能全局拦截异常,只能拦截上一个then或者初始化promise抛出的异常。
8、then()函数return的值可以被下一个then接收
9、then中可以返回promise,promise被触发resolved状态的返回值,可以被下一个then接收。
10、then中可以返回promise,promise如果没有触发resolved状态,则其后的then不会被执行。
11、Promise.reject()和Promise.resolve()都会返回一个Promise实例。
12、Promise.resolve()返回的实例可以添加then,then会立即执行。
13、Promise.reject()返回的实例可以添加then,catch会立即执行。