Promise 初识
promise 是一个 es6 的语法但是它可以通过 polyfill 在 es5 中使用。
我们在非编译的环境下也可以放心地使用 Promise
生成 promise 的 4 种方式
- 通过 new Promise
new Promise((reslove, reject) => {
//! 注意这里可能抛出异常
doSomething(function (err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
- 通过 Promise.resolve
function check() {
let pms = Promise.resolve(true);
if (needLogin) pms = checkLogin();
if (needAdmin) pms = pms.then((x) => x && checkAdmin());
return pms;
}
- 通过 Promise.reject
function someSpecialRequest() {
return http
.post("/some/xxx", someData)
.then((x) => {
// dosomething
})
.catch((x) => {
if (x.code == 2001) {
return true;
}
return Promise.reject(x);
});
}
- 通过 async 函数
async function() {
let ok = true;
if(needLogin)
ok = await checkLogin();
if(needAdmin&&ok)
ok = await checkAdmin()
return ok;
}
promise 的 3 个状态
- pending 等待中
new Promise((reslove, reject) => {
console.log(1);
resolve();
}).then(function () {
console.log(3);
});
console.log(2);
// 输出 1 2 3
- resolve 状态
Promise.resolve()
.then(function () {
return stepOne();
})
.then(function () {
// 等待stepOne结束才会执行
return stepTwo();
})
.then(function () {
return stepThree();
})
.catch(function (err) {
console.log(err);
});
Promise.resolve().then(function