筆記:promise實例+註釋
阿新 • • 發佈:2018-02-09
rip .org ror http gpo 錯誤 時間 一個 err
//////////////////////////////////////////////
var data = [1,2,3,4];
var promise = new Promise((resolve, reject) => {
console.log('init');
resolve(data); //成功的時候傳入的參數data
reject(error); //失敗的時候傳入的參數error
});
promise
.then((data) => {
console.log(data); //成功
return data; //返回data給下一個then()
})
.then((val) => { //val指上面返回的data,所以數據與命名無關
val.map((item) => {
console.log(item); //成功
});
})
.then(() => {
throw new Error('error!!!'); //拋出錯誤
})
.catch((error) => {
console.log('error '+ error); //捕獲錯誤,讓程序繼續運行
})
.then((data) => {
console.log(typeof data); //undefined,因為data沒有傳過來
})
///////////////////////////////////////////工作流
let data = 'this is data'
function asyncFunc(data) {
return new Promise((resolve, reject) => {
resolve(data);
reject(error);
});
}
asyncFunc(data)
.then((data) => {
console.log(data);
})
.catch((error) => {
console.log(error);
})
////////////////////////////ajax與異步操作
function getUrl(url) {
return new Promise((resolve, reject) => {
let req = new XMLHttpRequest();
req.open('GET', url, true);
req.onload = () => {
req.status === 200
? resolve(req.responseText)
: reject(new Error(req.statusText))
}
req.send();
});
}
let url = 'http://httpbin.org/get';
// 異步操作,resolve狀態後不會立即執行then()
getUrl(url) // 1
.then((data) => { // 7/8
console.log(data);
})
.catch((error) => {
console.error(error);
})
console.log('1'); // 2
setTimeout(() => { // 5
console.log('2');
}, 0);
setTimeout(() => { // 6
console.log('3');
}, 0);
setTimeout(() => { // 7/8 根據時間而定,等待時間長會先執行then()
console.log('4');
}, 1000);
console.log('5'); // 3
console.log('6'); // 4
//////////////////////////////////////
筆記:promise實例+註釋