2017-03-17 23 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

相关问题