2017-03-17 48 views
0

我開始與和的NodeJS回調閱讀基礎知識,在這裏我有一個代碼,什麼是函數(err,results){在下面?

exports.handler = (event, context, callback) => { 
    var bx = require('barcode-js'); 

    // Set default values. 
    var params = { 
     input: './1.bmp', 
     type: 'qrcode' 
    }; 

    bx.analyze(params, function (err, results) { 
    if (err) { 
     callback('There was an error processing this image: ' + err) 
    } 
    results.forEach(function(result) { 
     callback(null,'Result type :' + result.type + '\t'+'Value: '+result.value); 
    }); 
}); 
}; 

什麼是此行發生bx.analyze(params, function (err, results) {。爲什麼我們不能只使用bx.analyze(params)?

+0

你知道異步代碼是如何工作的嗎? – Shaharyar

+0

@Shaharyar我知道了 –

+0

爲什麼可以,或者爲什麼不能? – Benjamin

回答

1

第二個參數是function。稱爲callback

當你執行一個異步函數,你不能等待它的返回值:

var result = bx.analyze(params); //you can't do this 

所以你告訴函數,當它完成自己的工作,只是叫你當通過callback(功能第二個參數)。

//so `analyze()` will call your passed function rather than `return` the result 
//`err` will contain the error object if anything wrong happened in the analyze() function 
//`results` will contain result if everything was fine 
bx.analyze(params, function (err, results) { 
    if (err) 
     callback('There was an error processing this image: ' + err) 
}); 

我強烈建議您瞭解異步代碼如何在JavaScript中工作。你可以不學,直到的NodeJS然後..


更新:

在你的代碼,功能handler是一個異步功能,因此它需要一個callback作爲參數(就像analyze()

當此功能完成其作業時,它調用callback

現在在你的代碼,它被稱爲2倍:

1)當出現錯誤時,該功能將調用回調並傳遞錯誤到它:

if (err) { 
    callback('There was an error processing this image: ' + err); //its passing "err" returned from analyze() 
} 

2)當一切它通過結果集:

callback(null, 'Result type :' + result.type + '\t'+'Value: '+result.value); //the 1st parameter is being passed as "null" because there is no error in it, and second parameter passes the result 
+1

在這個什麼回調('處理此圖像時出錯:'+ err)呢? –

1

這是使代碼異步的回調函數。

表示您將函數作爲參數傳遞給bx.analyze(params)方法。一旦你的bx.analyze(params)完成,這個回調方法就會執行,所以它不會阻塞其他代碼,使代碼異步。

如果您需要如何執行此回調,那麼您必須查找Event loop,在Google中搜索它,並有大量文檔。

1

如果我們使用bx.analyze(params)那麼它是阻塞(同步)代碼。事件循環停止,直到bx.analyze(params)沒有返回任何值並且

沒有錯誤處理。

如果我們使用bx.analyze(params, function (err, results) { });那麼它是異步(非阻塞)代碼。事件循環不會等待返回值,它會轉到下一個語句,並且當bx.analyze(params, function (err, results) {返回回調事件循環處理它。

有錯誤handlation也做

的深刻理解看到這部影片https://www.youtube.com/watch?v=8aGhZQkoFbQ

相關問題