[英]Node.js - callback parameters
我目前正在學習Node和JavaScript中的回調,我對此感到困惑:
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
})
我的問題是:請求函數如何知道回調中每個參數/參數是什么? 因為我可以用兩個參數有效地調用函數回調並跳過錯誤? 例如,函數如何知道傳遞的第一個參數是響應而不是錯誤?
它是否在運行時檢查每種類型? 謝謝。
編寫請求API的程序員決定發送給回調的參數的順序。 在運行時沒有類型檢查。 如果你只在回調簽名中提供兩個參數,例如
function(response, body) {}
你仍然會收到錯誤對象和響應 - 只有在這種情況下,名為“response”的變量將保存錯誤對象,名為“body”的變量將保存響應。 你要跳過的輸入將是你沒有提供的第三個,身體。 參數的名稱沒有區別,它們在函數簽名中的位置決定了它們將被賦值的值。
按照慣例,在javascript回調中,回調的第一個參數通常表示錯誤對象。 它並不總是以這種方式編寫,但它是最佳實踐。
Possibile實現這個功能可能是:
function request (url, callback) {
// doing something
callback (error, response, body);
}
該函數將設置error
, response
和body
參數的值。 我不知道它是如何實現的,但是假設您為url
傳遞了一個數字。 可能的實現可能是:
function request (url, callback) {
if (typeof url === 'number') {
// Suppose that error is an instance of Error
callback (new Error ('Url must be a string'), null, null);
}
// other stuff...
}
當你調用request()
函數並提供一個函數作為參數時,它會在內部(模塊內部)調用該函數,並將它自己的數據作為參數傳入(然后用它來做各種事情)。 它傳入的數據是它自己生成的數據,它不是您正在創建的數據。
這是一個回調 。
不久之前我回答了一個問題,更深入地了解為什么這些模塊的結構是這樣的,請參閱: npm關於回調錯誤的指導原則
您正在使用特定模塊我的朋友和回調在這種情況下直接從它控制。
回調如何適用於“請求”模塊是研究的問題。 檢查他們的文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.