JavaScript筆記 #06# Promise簡單例子
阿新 • • 發佈:2018-09-06
scrip evel promise customer xxx rom pro 對象 turn
索引
- 回調版本
- Promise版本1
- Promise版本2
Notes
參考資料:
Promise
JavaScript Promise:簡介
你去書店借書,按照異步的套路,劇情如下↓
你:“老板,有xxx嗎?”
老板:“你等下,我得找一找看,到時候打電話給你。”
然後你就去做其它事情了。
1、回調版本:
// 輔助函數 const randomBoolean = () => { return Math.random() < 0.5; }; // 客戶對象,處理找書的結果const customer = { dealWithResult: function(success) { if(success) { console.log(‘customer:去書店取書‘); } else { console.log(‘customer:有空去別的書店問問‘); } } } // 書店老板對象,提供一個異步的找書方法。 const bossOfBookstore = { askForBook: function(bookName, phoneNumber) { setTimeout((phoneNumber)=> { let result = randomBoolean(); console.log(‘bossOfBookstore:‘ + (result ? ‘找到書了‘ : ‘沒有這本書‘)); customer.dealWithResult(result); }, 3000); } } //debugger; bossOfBookstore.askForBook(‘七龍珠‘, 15298000122); // → bossOfBookstore:沒有這本書 // → customer:有空去別的書店問問
2、Promise版本1:
// 輔助函數 const randomBoolean = () => { return Math.random() < 0.5; }; // 客戶對象,處理找書的結果 const customer = { dealWithResult: function(success) { if(success) { console.log(‘customer:去書店取書‘); } else { console.log(‘customer:有空去別的書店問問‘); } } } // 書店老板對象,提供一個異步的找書方法。 const bossOfBookstore = { askForBook: function(bookName, phoneNumber) { return new Promise(resolve => { setTimeout(phoneNumber => { let result = randomBoolean(); console.log(‘bossOfBookstore:‘ + (result ? ‘找到書了‘ : ‘沒有這本書‘)); resolve(result); // 書店老板才不關心你怎麽處理的! }, 3000); }); } } bossOfBookstore.askForBook(‘某某書‘, 15298000122).then(result => { customer.dealWithResult(result); });
3、Promise版本2:
// 輔助函數 const randomBoolean = () => { return Math.random() < 0.5; }; // 客戶對象,處理找書的結果 const customer = { dealWithResult: function(success) { if(success) { console.log(‘customer:去書店取書‘); } else { console.log(‘customer:有空去別的書店問問‘); } } } // 書店老板對象,提供一個異步的找書方法。 const bossOfBookstore = { askForBook: function(bookName, phoneNumber) { return new Promise((resolve, reject) => { setTimeout(phoneNumber => { let result = randomBoolean(); console.log(‘bossOfBookstore:‘ + (result ? ‘找到書了‘ : ‘沒有這本書‘)); if (result) { resolve(true); } else { reject(false); } }, 500); }); } } // 寫法一 bossOfBookstore.askForBook(‘某某書‘, 15298000122).then(result => { customer.dealWithResult(result); }).catch(result => { customer.dealWithResult(result); }); // 寫法二 bossOfBookstore.askForBook(‘某某書‘, 15298000122).then(result => { customer.dealWithResult(result); }, result => { customer.dealWithResult(result); });
JavaScript筆記 #06# Promise簡單例子