围绕三种状态,错误获取,静态方法,对比async,await
Promise 构造函数只有一个参数,是一个函数,这个函数在构造之后会直接被异步运行,所以我们称之为起始函数。起始函数包含两个参数 resolve 和 reject。
resolve 和 reject 都是函数,其中调用 resolve 代表一切正常,reject 是出现异常时所调用的:
Promise 类有 .then() .catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数,.then() 可以将参数中的函数添加到当前 Promise 的正常执行序列,.catch() 则是设定 Promise 的异常处理序列,.finally() 是在 Promise 执行的最后一定会执行的序列。
resolve 和 reject 的作用域只有起始函数,不包括 then 以及其他序列
then 块默认会向下顺序执行,return 是不能中断的,可以通过 throw 来跳转至 catch 实现中断。
function print(delay, message) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log(message);
resolve();
}, delay);
});
}
print(1000, "First").then(function () {
return print(4000, "Second");
}).then(function () {
print(3000, "Third");
});
我们可以将这段代码变得更好看:
async function asyncFunc() {
await print(1000, "First");
await print(4000, "Second");
await print(3000, "Third");
}
asyncFunc();
try{
//正常执行的代码
//如果出错,抛出错误
}catch(err){
//处理错误
}
throw 语句允许我们创建自定义错误 throw 语句允许我们创建自定义错误
初始态pending成功态resolved失败态rejected
promise.all是Promise提供的静态方法 参数是数组,它可以同时监听多个Promise的实例全部成功则成功
Promise.race 是Promise提供的一个静态方法 用于同时监听多个Promise ,跟随最快发生状态变化的实例