最简单的Promise示例
let p = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Faker')
//传递参数
resolve('Good')
}, 1000)
}).then((res) => { // 成功时调用
console.log(res)
}, (err) => { // 失败时调用
console.log(err)
})
Promise内的代码如果没有异步,则立即执行。而then中的回调函数为异步函数,最后执行。
第一个方法必须写,第二个错误方法可以不用写。
Promise的三种状态state:
promise的状态一但转变,就无法还原。不可逆。
使用Promise的例子:代替回调地狱,写出更易维护的代码:
function ajax(url, callback, nocallback) {
//创建 XMLHttpRequest 对象
var xhr
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr = new XMLHttpRequest();
}
else {
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
// 向服务器发送请求
xhr.open('GET', url, true)
xhr.send()
// 服务器 响应
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var obj = JSON.parse(xhr.responseText)
callback && callback(obj)
} else if (xhr.status === 404) {
nocallback && nocallback(xhr.statusText)
}
}
}
let newPromise = function (url) {
return new Promise((resolve, reject) => {
ajax(url, res => {
resolve(res)
}, (err) => {
reject(err)
})
})
}
newPromise('static/a.json')
.then((res) => {
console.log(res)
return newPromise('static/b.json')
}).then((res) => {
console.log(res)
return newPromise('static/ca.json')
}).then(res => {
console.log(res)
}).catch((err) => {
console.log(err)
})