成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Promise化,Promisify,將函數(shù)改成 既支持Callback回調(diào),又支持Promise

wushuiyong / 2063人閱讀

摘要:初學(xué),用開發(fā)項(xiàng)目。而且還是個(gè)不小的項(xiàng)目,說(shuō)起來(lái)挺冒險(xiǎn)的。一開始比較簡(jiǎn)單,并沒(méi)有使用也能順利進(jìn)行,隨著開發(fā)的深入,到了不用不行的地步了。于是產(chǎn)生了一個(gè)問(wèn)題,一些之前寫的方法并不支持,如果直接改成,那之前調(diào)用過(guò)的地方也都得改,工作量有點(diǎn)大。

初學(xué) Node.js,用 Express 開發(fā) Web 項(xiàng)目。
而且還是個(gè)不小的項(xiàng)目,說(shuō)起來(lái)挺冒險(xiǎn)的。

一開始比較簡(jiǎn)單,并沒(méi)有使用 Promise 也能順利進(jìn)行,
隨著開發(fā)的深入,到了不用 Promise 不行的地步了。

于是產(chǎn)生了一個(gè)問(wèn)題,一些之前寫的方法并不支持 Promise
如果直接改成 Promise,那之前調(diào)用過(guò)的地方也都得改,工作量有點(diǎn)大。
如果加一個(gè) Promise 版,那就有點(diǎn)啰嗦有點(diǎn)丑陋,如下所示:

// 也就是同一個(gè)功能,寫兩個(gè)版本
function getInfo(uid, callback) { ... };
function getInfoPromise(uid) { ... };

聽說(shuō) Bluebird 有個(gè) promisify 方法,可以將方法 Promise 化,
但是又感覺為了這一個(gè)方法,多加載一個(gè)庫(kù),有點(diǎn)浪費(fèi)內(nèi)存,
畢竟 Node.js 現(xiàn)在原生的支持 Promise 了,
能不能“人工手動(dòng)”將函數(shù)改成,既支持 Callback 回調(diào),又支持 Promise 呢?
于是有了以下修改:

// 原先只支持 callback 回調(diào)版:
var getInfo = function(uid, callback) {
    var sql = "select * from v_user where uid=? limit 1";
    Mysql.query(sql, [uid], function(err, row) {
        if(err) return callback(err);
        if(row.length===0) return callback();

        var info = row[0];
        callback(null, info);
    });
};
// 修改后 既支持 callback 回調(diào),又支持 Promise
var getInfo = function(uid, callback) {
    return new Promise(function(resolve, reject) {
        if (callback) {
            resolve = function (ret) {
                callback(null, ret);
            };
            reject = callback;
        }

        var sql = "select * from v_user where uid=? limit 1";
        Mysql.query(sql, [uid], function(err, row) {
            if(err) return reject(err);
            if(row.length===0) return resolve();

            var info = row[0];
            resolve(info);
        });
    });
};

但不知道這種寫法 是否足夠聰明,歡迎指教。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/79055.html

相關(guān)文章

  • Node.js 8 中的 `util.promisify`

    摘要:我們就可以升級(jí)以前所有的異步回調(diào)函數(shù)了。大體上來(lái)說(shuō),這套方案通過(guò)使用回調(diào)實(shí)例包裹原先的回調(diào)函數(shù),可以將原先復(fù)雜的嵌套展開鋪平,從而降低開發(fā)和維護(hù)的難度和成本。 Node.js 8 于上個(gè)月月底正式發(fā)布,帶來(lái)了很多新特性。其中比較值得注意的,便有 util.promisify() 這個(gè)方法。 如果你已經(jīng)很熟悉 Promise,請(qǐng)繼續(xù)往下看。如果你還不熟悉 Promise,可以先跳過(guò)去看下...

    HackerShell 評(píng)論0 收藏0
  • util.promisify 的那些事兒

    摘要:自定義的化有那么一些場(chǎng)景,是不能夠直接使用來(lái)進(jìn)行轉(zhuǎn)換的,有大概這么兩種情況沒(méi)有遵循約定的回調(diào)函數(shù)返回多個(gè)參數(shù)的回調(diào)函數(shù)首先是第一個(gè),如果沒(méi)有遵循我們的約定,很可能導(dǎo)致的誤判,得不到正確的反饋。 util.promisify是在node.js 8.x版本中新增的一個(gè)工具,用于將老式的Error first callback轉(zhuǎn)換為Promise對(duì)象,讓老項(xiàng)目改造變得更為輕松。 在官方推...

    shuibo 評(píng)論0 收藏0
  • CallbackPromise 間的橋梁 —— promisify

    摘要:今天要介紹的是,就是回調(diào)函數(shù)與間的橋梁。什么樣的叫有兩個(gè)條件回調(diào)函數(shù)在主函數(shù)中的參數(shù)位置必須是最后一個(gè)回調(diào)函數(shù)參數(shù)中的第一個(gè)參數(shù)必須是。 作者:晃晃本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明作者及出處 Promise 自問(wèn)世以來(lái),得到了大量的應(yīng)用,簡(jiǎn)直是 javascript 中的神器。它很好地解決了異步方法的回調(diào)地獄、提供了我們?cè)诋惒椒椒ㄖ惺褂?return 的能力,并將 callback 的調(diào)用納入了自...

    RayKr 評(píng)論0 收藏0
  • 再談Promise

    摘要:方法完成回調(diào)注冊(cè)模式下,對(duì)象通過(guò)方法調(diào)用,注冊(cè)完成態(tài)和失敗態(tài)的回調(diào)函數(shù)。這些回調(diào)函數(shù)組成一個(gè)回調(diào)隊(duì)列,處理的值。調(diào)用實(shí)例的方法,能使注冊(cè)的回調(diào)隊(duì)列中的回調(diào)函數(shù)依次執(zhí)行。 之前寫了一篇關(guān)于ES6原生Promise的文章。近期又讀樸靈的《深入淺出Node》,里面介紹了一個(gè)Promise/Deferred模式。 Promise是解決異步問(wèn)題的利器。它其實(shí)是一種模式。Promise有三種狀態(tài),...

    chenjiang3 評(píng)論0 收藏0
  • Promisify 的源碼解析

    摘要:參考文檔升級(jí)后的函數(shù)回調(diào)參數(shù)問(wèn)題中的使用方法和還是不一樣的源碼講解的內(nèi)部機(jī)制優(yōu)化相關(guān)內(nèi)容文章官方文檔簡(jiǎn)述使用過(guò)的都知道這個(gè)方法的作用,通過(guò)該方法會(huì)讓形式的函數(shù)風(fēng)格轉(zhuǎn)換成方法,可以認(rèn)為是一顆語(yǔ)法糖,例如接下來(lái)我們就分析一下這個(gè)的內(nèi)部流程。 參考文檔 升級(jí)bluebird 3后Promise.promisify的函數(shù)回調(diào)參數(shù)問(wèn)題:3中的使用方法和2還是不一樣的 How does Bl...

    gougoujiang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<