1. 程式人生 > >筆記:promise實例+註釋

筆記:promise實例+註釋

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實例+註釋