国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Promise化,Promisify,將函數改成 既支持Callback回調,又支持Promise

wushuiyong / 1990人閱讀

摘要:初學,用開發項目。而且還是個不小的項目,說起來挺冒險的。一開始比較簡單,并沒有使用也能順利進行,隨著開發的深入,到了不用不行的地步了。于是產生了一個問題,一些之前寫的方法并不支持,如果直接改成,那之前調用過的地方也都得改,工作量有點大。

初學 Node.js,用 Express 開發 Web 項目。
而且還是個不小的項目,說起來挺冒險的。

一開始比較簡單,并沒有使用 Promise 也能順利進行,
隨著開發的深入,到了不用 Promise 不行的地步了。

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

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

聽說 Bluebird 有個 promisify 方法,可以將方法 Promise 化,
但是又感覺為了這一個方法,多加載一個庫,有點浪費內存,
畢竟 Node.js 現在原生的支持 Promise 了,
能不能“人工手動”將函數改成,既支持 Callback 回調,又支持 Promise 呢?
于是有了以下修改:

// 原先只支持 callback 回調版:
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 回調,又支持 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);
        });
    });
};

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79055.html

相關文章

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

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

    HackerShell 評論0 收藏0
  • util.promisify 的那些事兒

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

    shuibo 評論0 收藏0
  • CallbackPromise 間的橋梁 —— promisify

    摘要:今天要介紹的是,就是回調函數與間的橋梁。什么樣的叫有兩個條件回調函數在主函數中的參數位置必須是最后一個回調函數參數中的第一個參數必須是。 作者:晃晃本文原創,轉載請注明作者及出處 Promise 自問世以來,得到了大量的應用,簡直是 javascript 中的神器。它很好地解決了異步方法的回調地獄、提供了我們在異步方法中使用 return 的能力,并將 callback 的調用納入了自...

    RayKr 評論0 收藏0
  • 再談Promise

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

    chenjiang3 評論0 收藏0
  • Promisify 的源碼解析

    摘要:參考文檔升級后的函數回調參數問題中的使用方法和還是不一樣的源碼講解的內部機制優化相關內容文章官方文檔簡述使用過的都知道這個方法的作用,通過該方法會讓形式的函數風格轉換成方法,可以認為是一顆語法糖,例如接下來我們就分析一下這個的內部流程。 參考文檔 升級bluebird 3后Promise.promisify的函數回調參數問題:3中的使用方法和2還是不一樣的 How does Bl...

    gougoujiang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<