第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何將現(xiàn)有的回調(diào)API轉(zhuǎn)換為承諾?

如何將現(xiàn)有的回調(diào)API轉(zhuǎn)換為承諾?

MMMHUHU 2019-05-21 15:30:14
我想使用promises,但我有一個(gè)回調(diào)API,格式如下:1. DOM加載或其他一次性事件:window.onload; // set to callback...window.onload = function() {};2.平原回調(diào):function request(onChangeHandler) {    ...}request(function() {    // change happened    ...});3.節(jié)點(diǎn)樣式回調(diào)(“nodeback”):function getStuff(dat, callback) {    ...}getStuff("dataParam", function(err, data) {    ...})4.具有節(jié)點(diǎn)樣式回調(diào)的整個(gè)庫:API;API.one(function(err, data) {    API.two(function(err, data2) {        API.three(function(err, data3) {            ...        });    });});如何在promises中使用API,我該如何“宣傳”它?如何將現(xiàn)有的回調(diào)API轉(zhuǎn)換為承諾?
查看完整描述

3 回答

?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

function divisionAPI (number, divider, successCallback, errorCallback) {


    if (divider == 0) {

        return errorCallback( new Error("Division by zero") )

    }


    successCallback( number / divider )


}

Promise Javascript異步API代碼:


function divisionAPI (number, divider) {


    return new Promise(function (fulfilled, rejected) {


        if (divider == 0) {

            return rejected( new Error("Division by zero") )

        }


        fulfilled( number / divider )


     })


}

(我建議訪問這個(gè)美麗的來源)


也Promise可以一起使用async\await的ES7,以使程序流程等待一個(gè)fullfiled類似如下的結(jié)果:


function getName () {


    return new Promise(function (fulfilled, rejected) {


        var name = "John Doe";


        // wait 3000 milliseconds before calling fulfilled() method

        setTimeout ( 

            function() {

                fulfilled( name )

            }, 

            3000

        )


    })


}



async function foo () {


    var name = await getName(); // awaits for a fulfilled result!


    console.log(name); // the console writes "John Doe" after 3000 milliseconds


}



foo() // calling the foo() method to run the code

使用.then()方法使用相同代碼的另一種用法


function getName () {


    return new Promise(function (fulfilled, rejected) {


        var name = "John Doe";


        // wait 3000 milliseconds before calling fulfilled() method

        setTimeout ( 

            function() {

                fulfilled( name )

            }, 

            3000

        )


    })


}



// the console writes "John Doe" after 3000 milliseconds

getName().then(function(name){ console.log(name) })

Promise也可以在任何基于Node.js的平臺(tái)上使用react-native。


獎(jiǎng)勵(lì):混合方法

(假設(shè)回調(diào)方法有兩個(gè)參數(shù)作為錯(cuò)誤和結(jié)果)


function divisionAPI (number, divider, callback) {


    return new Promise(function (fulfilled, rejected) {


        if (divider == 0) {

            let error = new Error("Division by zero")

            callback && callback( error )

            return rejected( error )

        }


        let result = number / divider

        callback && callback( null, result )

        fulfilled( result )


     })


}

上述方法可以響應(yīng)舊時(shí)尚回調(diào)和Promise使用的結(jié)果。


希望這可以幫助。在Node.JS中將函數(shù)轉(zhuǎn)換為promise之前


var request = require('request'); //http wrapped module


function requestWrapper(url, callback) {

    request.get(url, function (err, response) {

      if (err) {

        callback(err);

      }else{

        callback(null, response);             

      }      

    })

}



requestWrapper(url, function (err, response) {

    console.log(err, response)

})

轉(zhuǎn)換后


var request = require('request');


function requestWrapper(url) {

  return new Promise(function (resolve, reject) { //returning promise

    request.get(url, function (err, response) {

      if (err) {

        reject(err); //promise reject

      }else{

        resolve(response); //promise resolve

      }

    })

  })

}



requestWrapper('http://localhost:8080/promise_request/1').then(function(response){

    console.log(response) //resolve callback(success)

}).catch(function(error){

    console.log(error) //reject callback(failure)

})

如果你需要處理多個(gè)請(qǐng)求


var allRequests = [];

allRequests.push(requestWrapper('http://localhost:8080/promise_request/1')) 

allRequests.push(requestWrapper('http://localhost:8080/promise_request/2'))

allRequests.push(requestWrapper('http://localhost:8080/promise_request/5'))    


Promise.all(allRequests).then(function (results) {

  console.log(results);//result will be array which contains each promise response

}).catch(function (err) {

  console.log(err)

});


查看完整回答
反對(duì) 回復(fù) 2019-05-21
?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

今天,我可以用PromiseNode.js作為一個(gè)普通的JavaScript方法。

一個(gè)簡單而基本的例子Promise(用KISS方式):

普通的 Javascript異步API代碼:

function divisionAPI (number, divider, successCallback, errorCallback) {


    if (divider == 0) {

        return errorCallback( new Error("Division by zero") )

    }


    successCallback( number / divider )


}

Promise Javascript異步API代碼:


function divisionAPI (number, divider) {


    return new Promise(function (fulfilled, rejected) {


        if (divider == 0) {

            return rejected( new Error("Division by zero") )

        }


        fulfilled( number / divider )


     })


}


也Promise可以一起使用async\await的ES7,以使程序流程等待一個(gè)fullfiled類似如下的結(jié)果:


function getName () {


    return new Promise(function (fulfilled, rejected) {


        var name = "John Doe";


        // wait 3000 milliseconds before calling fulfilled() method

        setTimeout ( 

            function() {

                fulfilled( name )

            }, 

            3000

        )


    })


}



async function foo () {


    var name = await getName(); // awaits for a fulfilled result!


    console.log(name); // the console writes "John Doe" after 3000 milliseconds


}



foo() // calling the foo() method to run the code

使用.then()方法使用相同代碼的另一種用法


function getName () {


    return new Promise(function (fulfilled, rejected) {


        var name = "John Doe";


        // wait 3000 milliseconds before calling fulfilled() method

        setTimeout ( 

            function() {

                fulfilled( name )

            }, 

            3000

        )


    })


}



// the console writes "John Doe" after 3000 milliseconds

getName().then(function(name){ console.log(name) })

Promise也可以在任何基于Node.js的平臺(tái)上使用react-native。


獎(jiǎng)勵(lì):混合方法

(假設(shè)回調(diào)方法有兩個(gè)參數(shù)作為錯(cuò)誤和結(jié)果)


function divisionAPI (number, divider, callback) {


    return new Promise(function (fulfilled, rejected) {


        if (divider == 0) {

            let error = new Error("Division by zero")

            callback && callback( error )

            return rejected( error )

        }


        let result = number / divider

        callback && callback( null, result )

        fulfilled( result )


     })


}

上述方法可以響應(yīng)舊時(shí)尚回調(diào)和Promise使用的結(jié)果。


希望這可以幫助。


查看完整回答
反對(duì) 回復(fù) 2019-05-21
  • 3 回答
  • 0 關(guān)注
  • 721 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)