有没有人能给我一个简单的Node.js回调函数的例子?我已经在许多网站上搜索了,但是仍然不能很好地理解它,请给我一个简单的例子。
getDbFiles(store, function(files){
getCdnFiles(store, function(files){
})
})
我想做类似那样的事情...
有没有人能给我一个简单的Node.js回调函数的例子?我已经在许多网站上搜索了,但是仍然不能很好地理解它,请给我一个简单的例子。
getDbFiles(store, function(files){
getCdnFiles(store, function(files){
})
})
我想做类似那样的事情...
var myCallback = function(data) {
console.log('got data: '+data);
};
var usingItNow = function(callback) {
callback('get it?');
};
现在打开节点或浏览器控制台,然后粘贴上面的定义。
最后使用下一行代码:
usingItNow(myCallback);
关于节点风格的错误惯例
Costa问如果我们遵守节点错误回调惯例,那么这会是什么样子。
按照这个惯例,回调函数应该至少接收一个参数,即第一个参数作为错误。根据上下文情况,我们可能还会有一个或多个其他的可选参数。在这种情况下,上述示例就是我们的上下文。
下面我将按照这个惯例重新编写我们的示例。
var myCallback = function(err, data) {
if (err) throw err; // Check for the error and throw if it exists.
console.log('got data: '+data); // Otherwise proceed as usual.
};
var usingItNow = function(callback) {
callback(null, 'get it?'); // I dont want to throw an error, so I pass null for the error argument
};
如果我们想模拟错误情况,我们可以这样定义 usingItNow。var usingItNow = function(callback) {
var myError = new Error('My custom error!');
callback(myError, 'get it?'); // I send my error as the first argument.
};
最终的用法与上面完全相同:
usingItNow(myCallback);
只有一个行为上的区别,取决于你定义的usingItNow
版本:是将“真值”(错误对象)提供给回调函数作为第一个参数的版本,还是将 null 作为错误参数提供给它。
回调函数就是你将一个函数传递给另一个函数,以便该函数可以在稍后的时间调用它。这在异步API中很常见;API调用立即返回,因为它是异步的,所以你要将一个函数传递给它,当API完成其异步任务时,它可以调用该函数。
我能想到的JavaScript中最简单的例子是setTimeout()
函数。它是一个全局函数,接受两个参数。第一个参数是回调函数,第二个参数是延迟的毫秒数。该函数被设计成等待适当的时间,然后调用你的回调函数。
setTimeout(function () {
console.log("10 seconds later...");
}, 10000);
var callback = function () {
console.log("10 seconds later...");
};
setTimeout(callback, 10000);
fs
库读取文件。 fs
模块公开了两个独特的API函数:readFile
和readFileSync
。
readFile
函数是异步的,而readFileSync
显然不是。您可以看到他们希望您尽可能使用异步调用,因为他们称它们为readFile
和readFileSync
而不是readFile
和readFileAsync
。以下是使用两个函数的示例。
同步:
var data = fs.readFileSync('test.txt');
console.log(data);
test.txt
的所有内容读入内存并存储在变量data
中。在Node中,通常认为这是一种不良做法。但有时候它是有用的,比如写一个简单但繁琐的脚本,并且您不太关心节省每一纳秒的时间。var callback = function (err, data) {
if (err) return console.error(err);
console.log(data);
};
fs.readFile('test.txt', callback);
err
和data
。异步函数的一个问题是捕获错误变得更加困难,因此许多基于回调的API将错误作为回调函数的第一个参数传递。最佳实践是在执行任何其他操作之前检查err
是否有值。如果有,停止回调的执行并记录错误。try/catch
块来捕获它们。try {
var data = fs.readFileSync('test.txt');
console.log(data);
} catch (err) {
console.error(err);
}
try/catch
来捕获。适当的异步API会始终捕获自己的错误,然后将这些错误传递到回调中,在那里您可以根据需要处理它。这是使用fs.readFile
和fs.writeFile
复制文本文件的示例:
var fs = require('fs');
var copyFile = function(source, destination, next) {
// we should read source file first
fs.readFile(source, function(err, data) {
if (err) return next(err); // error occurred
// now we can write data to destination file
fs.writeFile(destination, data, next);
});
};
这是使用copyFile
函数的示例:
copyFile('foo.txt', 'bar.txt', function(err) {
if (err) {
// either fs.readFile or fs.writeFile returned an error
console.log(err.stack || err);
} else {
console.log('Success!');
}
});
常见的Node.js模式建议回调函数的第一个参数为错误对象。您应该使用这个模式,因为所有控制流模块都依赖于它:
next(new Error('I cannot do it!')); // error
next(null, results); // no error occurred, return result
尝试这个例子,它非常简单易懂,只需复制保存newfile.js,然后运行该应用程序的命令是node newfile。
function myNew(next){
console.log("Im the one who initates callback");
next("nope", "success");
}
myNew(function(err, res){
console.log("I got back from callback",err, res);
});
callBackFunction (data, function ( err, response ){
console.log(response)
})
// callbackfunction
function callBackFuntion (data, callback){
//write your logic and return your result as
callback("",result) //if not error
callback(error, "") //if error
}
//delay callback function
function delay (seconds, callback){
setTimeout(() =>{
console.log('The long delay ended');
callback('Task Complete');
}, seconds*1000);
}
//Execute delay function
delay(1, res => {
console.log(res);
})
// Traditional JS way
function display(result) {
console.log("Sum of given numbers is", result);
}
function calculateSum(num1, num2, callback) {
console.log("FIrst number is", num1, "and second number is", num2);
const result = num1 + num2;
callback(result);
}
calculateSum(10, 20, display);
// Node JS way
const display = function(result) {
console.log("Sum of given numbers is", result);
}
const calculateSum = function(num1, num2, callback) {
console.log("FIrst number is", num1, "and second number is", num2);
const result = num1 + num2;
callback(result);
}
calculateSum(10, 20, display);
// By using anonymous function
const calculateSum = function(num1, num2, callback) {
console.log("FIrst number is", num1, "and second number is", num2);
const result = num1 + num2;
callback(result);
}
calculateSum(10,20, function(result) {
console.log("Sum of given numbers is", result)
});
// By using arrow function
const calculateSum = function(num1, num2, callback) {
console.log("FIrst number is", num1, "and second number is", num2);
const result = num1 + num2;
callback(result);
}
calculateSum(10, 20, x => console.log("Sum of given numbers is", x));
https://codeburst.io/javascript-what-the-heck-is-a-callback-aba4da2deced
function doHomework(subject, callback) {
alert(`Starting my ${subject} homework.`);
callback();
}
function alertFinished(){
alert('Finished my homework');
}
doHomework('math', alertFinished);
const fs = require('fs');
fs.stat('input.txt', function (err, stats) {
if(err){
console.log(err);
} else {
console.log(stats);
console.log('Completed Reading File');
}
});
'fs'是一个Node.js模块,可以帮助你读取文件。 回调函数将确保在执行之前完全读取名为'input.txt'的文件。 fs.stat()函数用于获取文件信息,如文件大小、创建日期和修改日期。
回调函数
是作为参数传递给高阶函数
(wikipedia)的一种函数。一个简单的回调函数实现如下:
const func = callback => callback('Hello World!');
func(string => console.log(string));