理解javascript和node.js中的回调

时间:2015-09-08 07:24:07

标签: javascript node.js callback

我理解Javascript中回调的概念。例如,这种代码对我来说是完全合理的 -

function processArray(arr, callback) {
var resultArr = new Array(); 
for (var i = arr.length-1; i >= 0; i--)
    resultArr[i] = callback(arr[i]);
return resultArr;
}

var arr = [1, 2, 3, 4];
var arrReturned = processArray(arr, function(arg) {return arg * -1;});
// arrReturned would be [-1, -2, -3, -4]

我知道回调只是一个占位符函数,可以是我们稍后编写的任何函数。但是有些类型的回调我不知道怎么写。例如 -

function processData (callback) {
fetchData(function (err, data) {
if (err) {
  console.log("An error has occured. Abort everything!");
  callback(err);
}
data += 1;
callback(data);
});
}

如何定义fetchData的回调?程序如何知道什么是错误的以及什么是数据?

3 个答案:

答案 0 :(得分:2)

通常在node.js中,回调的结构基本上与此function(err, result)

类似

这意味着第一个参数是错误,第二个参数是数据。当你没有错误时,你只需传递一个空值。这已经是一个标准。

您发布的第二个代码应更改如下:

function processData (callback) {
    fetchData(function (err, data) {
        if (err) {
            console.log("An error has occured. Abort everything!");
            callback(err);
        }
        data += 1;
        callback(null, data);
    });
}

在上述情况下,如果您不想将data增加1,则只需拨打fetchData(callback)

答案 1 :(得分:1)

我的两分钱: 在JavaScript中,一切都是对象,功能也是如此。因此函数可以作为参数传递给其他函数。这使您可以使用回调作为争论,然后在api实现中使用这些回调在完成API任务后执行用户的任务。在这里,如果您尝试重新阅读代码,那么您将意识到您的错误观念。其他用户也在这里引用了相同的内容。

编辑

function fetchdata(callback){
var err = "This is Error message";
var data = {samplekey : "samplevalue"};
callback(err, data); // here in the implementation of fetchdata
// we are making those data and feeding to the callback function.
}
function callback(err, data){
// Implementation of call back
} 

这里为了使可读目的,我把回调函数分开了。您也可以简单地传递它。

答案 2 :(得分:0)

我认为你完全不了解JavaScript。 我从here

得到了这个例子
function doSomething(callback) {
    // ...

    // Call the callback
    callback('stuff', 'goes', 'here');
}

function foo(a, b, c) {
    // I'm the callback
    alert(a + " " + b + " " + c);
}

doSomething(foo);