2018年12月13日 星期四

【JavaScript】Callback和Promise差別在哪?如何實作?


▌Callback和Promise差別在哪

  • Javascript有許多非同步的動作,像是clickAJAXSetinterval
  • 但如果我們想要讓他照我們想要的順序怎麼辦?
兩個方法:callback還有promise
早期:callback(函示裡面裝函式) //但缺點是產生callback hell
ES6:Promise解決(回傳resolve或是reject)

▌Callback

目標:我們希望先get api,在use api,可是由於get api是非同步的,所以加入一個callback()讓他強制在get api才執行。
function getapi(callback) { //得到一個函式
    setTimeout(function () {
        console.log("get api");
        callback()   //讓callback只在get api後才要執行
    }, 1000);
}

getapi(function () { //input 一個函式
    console.log("use api") //這行只會在get api後才執行
})

▌Promise

  • ES6之後的語法
  • getapi = new Promise(function(resolve,reject){ 會異步的函式 resolve() }
  • getapi.then(){function(){ api回來才要執行的函式 }}
寫法一
let getapi = new Promise(function (resolve, reject) {
    setTimeout(function () {
        console.log("i m api");
        resolve() //這行不要忘記
    }, 1000);
})
getapi.then(
    function () {
        console.log("use api")
    }
).then(function () {
    console.log("use api again")
})
寫法二
function getapi() {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            console.log("i m api");
            resolve()
        }, 1000);
    })
}

getapi().then(
    function () {
        console.log("use api")
    }
).then(function () {
    console.log("use api again")
})

沒有留言:

張貼留言

【JavaScript】用物件Mapping的方法

If的寫法 我們希望當變數是a時就回傳1,變數是b就回傳2,變數是c就會回傳3,一般寫法就是用if,但是這樣會很冗 ​ // IF style var word if(word == 'a'){ word = 1 } else if...