簡體   English   中英

異常捕獲到狀態代碼為200的Get()

[英]Get() with status code 200 caught in the exception

一個非常簡單的get(),狀態碼為200時,它如何進入catch塊?

const { promisify } = require('util');
const { get, post, patch, del } = require('https');

//const [ getPm, postPm, patchPm, deletePm ] = [get, post, patch, del].map(promisify);
const getPm = promisify(get);

(async () => {
    try {
        const res = await getPm('https://www.yahoo.com');
        console.log('success !');
    } catch (e) {
        console.log('failure !');
        console.log(e.statusCode);
    }
})();

當我運行它時,打印出“失敗”,狀態為200,怎么來的? 有什么建議么 ?

在這種情況下,問題是使用util.promisify Promisify適用於標准的“節點樣式”回調,這是使用兩個參數調用的函數(第一個參數是錯誤,第二個參數是結果(如果成功))。

如果在文檔中檢查https.get ,您會發現這不是標准的節點樣式回調,它始終只是傳遞給結果正文。 util.promisify其視為錯誤,因此它總是拒絕。

您需要自己編寫一個小的new Promise包裝器,而不是使用內置的promisify函數,以使您的代碼片段正常工作。 我建議您跳過麻煩,而使用已可用的請求-承諾模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM