我理解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的回调?程序如何知道什么是错误的以及什么是数据?
答案 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);