1. 程式人生 > >JavaScript筆記 #06# Promise簡單例子

JavaScript筆記 #06# Promise簡單例子

scrip evel promise customer xxx rom pro 對象 turn

索引

  1. 回調版本
  2. Promise版本1
  3. 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簡單例子