Promise 对象是一种连接生产者与消费者的特殊 JS 对象, 类似"订阅列表".
let promise = new Promise(
// 参数是执行器 executor
function(resolve, reject) {
// 扮演生产者的角色 通常是异步执行某些操作
// 生产者必须调用 resolve 或者 reject
});
// promise 对象具有两个属性
// state 和 result
Promise 的参数是一个函数 function(resolve, reject) {}
, 称作执行器, 它会自动执行.
resolve(value)
或者 reject(error)
被 new 出来的 promise 对象具有以下两个内部属性( 无法直接调用,只有 .then
/.catch
/.finally
才能使用,即消费者才可以享用 )
"pending"
resolve
调用后 变为 "fulfilled"
"rejected"
调用后变为 "rejected"
fulfilled
或者 rejected
的 promise 对象被称作 settled undefined
resolve(value)
调用后变为 value
reject(error)
调用后变为 error
结果的唯一性
执行器应当仅调用 1 次resolve
或者 1 次reject
, 调用之后 state 的状态就是最终状态,不会再次发生改变. 所有其他的再对resolve
和reject
的调用都会被忽略:
promise.then(
function(result) { /* handle a successful result */ },
function(error) { /* handle an error */ }
);
// .catch(errorHandlingFunction) 等价于 .then(null, errorHandlingFunction)
// .finally(f) 等价于 .then(f, f)
result
属性为 then
函数的函数参数的返回值(如果返回的是 promise 对象, 则要等待其 settled, 再获取其 result
)then
方法的对象). 这样 result 会被进一步沿着链向下传递