串流星:使用同步函式庫 - 包裝Async和繫結環境

*#Whats流星.包裝Async和流星.綁定環境?

在第 1 部分中,我們看到了 Meteor 如何使用光纖抽象異步代碼,並提供了一種以同步樣式編寫 JS 的簡單方法。在第 2 部分中,我們瞭解如何使用純非同步庫

使用光纖,我們可以修改非同步函數,編寫同步代碼。但是,如果無法像第三方庫那樣修改函數,會發生什麼情況?

在 ShareThis ,我們的 Meteor 應用程式使用亞馬遜的 S3 作為緩存和數據存儲層。從 Amazon S3 文件中,要加入 S3 儲存桶的 JavaScript 方法簽名看起來像

"'

獲取物件(參數={},回調)⇒AWS。請求

//This is how the function would look in Meteor server code

    S3.把物件({

    桶: ' sharethis -洞察商店',

    鍵:鍵,

    正文 : 資料

    },函數(錯誤,結果){

    如果(結果){

      控制台.log("完成");

      //optionally pass in callback

    }

    });

"'

上述代碼將不能按預期工作,因為對 S3.putObject 的回調未綁定到當前光纖

在此用例中,我們使用 Meteor.wrapAsync 並將非同步函數包裝到當前光纖中

*#What流星.wrapAsync嗎?

Meteor.wrapAsync 採用您給它作為第一個參數的方法,並在當前光纖中運行它。

它還附加回調(它假定使用回調的傳統節點樣式,即該方法將回調作為其最終參數,其中兩個參數(錯誤和結果)將基於調用結果為空

回調與 Meteor.bind 環境綁定,並阻止當前光纖,直到觸發回調。一旦回調觸發,它返回結果或引發錯誤。

"'javascript

功能同步中繼( 單位 )

傳回流星.wrapAsync(非同步功能)

}

"'

[如何使用 Meteor 傳回的同步包裝函數存取錯誤物件?

一種方法使用 try/catch 塊,因為在出現錯誤的情況下,同步函數將引發它,而不是作為非同步函數回檔的第一個參數傳遞。

"'

嘗試{

var 結果=同步Func(參數);

控制台.log("成功",結果);

}

擷取 (錯誤)?

控制台.log("錯誤:",錯誤);

}

// which is equivalent to –

非同步功能 (參數、函數(錯誤、結果)?

如果(錯誤)

    控制台.log("錯誤",錯誤);

    控制台.log("結果",結果);

});

"'

這非常適合將異步代碼轉換為同步代碼,因為您可以在下一行上使用方法的結果,而不是使用回調和/或嵌套更深的函數。它甚至負責為您綁定回調到當前光纖(使用 Meteor.bind 環境)。

最後一條需要注意的是,如果您希望對非同步庫函數的回調執行更多操作(只是因為),您必須顯式使用 Meteor.bind 環境,否則您會收到一個錯誤,指出 Meteor 代碼必須始終在光纖中運行。

"'

瓦爾芬奇=函數(cb){

    S3.put物件(參數、串流星.結合環境(函數(錯誤、資料)

      如果(錯誤){

       拋出新的流星錯誤("S3上的存儲失敗");

      }其他{

        控制台.log("在 S3 上成功存儲數據");

          cb(空,數據);

    }

    }));

 };

返回(Meteor.wrapAsync(func)();

"'

很少哥查,你需要意識到,當使用流星.

它旨在使用純異步函數,這些函數期望回調時出現錯誤,結果為參數。此外,它們僅在伺服器端工作(因為您不能在用戶端使用光纖)

伺服器端方法(如 Meteor.HTTP.call)已經以這種方式包裝。如果調用它時沒有回調,則該方法將阻塞,直到收到回應。否則,它將立即返回,然後在收到網路回應後執行回調。

About ShareThis

ShareThis has unlocked the power of global digital behavior by synthesizing social share, interest, and intent data since 2007. Powered by consumer behavior on over three million global domains, ShareThis observes real-time actions from real people on real digital destinations.

Subscribe to our Newsletter

Get the latest news, tips, and updates

Subscribe

Related Content