我理解回调函数,但是我不理解 Promise 方法和 async 和 await。为什么要在 Node.js 中使用这三个函数?能否用示例代码来解释一下。
我理解回调函数,但是我不理解 Promise 方法和 async 和 await。为什么要在 Node.js 中使用这三个函数?能否用示例代码来解释一下。
回调函数是作为另一个函数的参数传递的一种函数,它在结束时执行。代码示例如下:
function(callback){
//you do some tasks here that takes time
callback();
}
回调函数是处理异步代码的一种方法。例如,您可能需要在Node应用程序中从文件中读取数据,而这个过程需要时间。因此,为了避免在读取时阻塞您的代码,Node.js会在执行回调后返回并执行其他任务。
Promise也是处理异步代码的一种方式,但更易读。例如,不使用回调函数的写法:
example(function(){
return example1(function(){
return example2(function(){
return example3(function(){
done()
})
})
})
})
example()
.then(example1)
.then(example2)
.then(example3)
.then(done)
异步函数用于编写异步代码,特别是处理Promise. 在这个函数内部使用关键字await来暂停promise的执行,直到它被解析。换句话说,它等待Promise解析完成,然后恢复异步函数的执行。例如:
async function example(){
var data = await getData() // it waits until the promise is resolved
return data;
}
Callback Function
var fs = require('fs');
fs.readFile(fileName, 'utf8', function read(err, contents) {
console.log(contents);
});
console.log('after calling readFile');
这里的函数read(err, contents){}是一个回调函数,当读取文件完成后打印出文件内容。 但在某些情况下的问题可能是,在读取文件之前,“after calling readFile”会被显示到控制台。 因为Node Js以异步模式执行语句。
Promise
var fs = require('fs');
function readMyFile(fileName)
{
return new Promise(function(resolve,reject)
{
fs.readFile(fileName, 'utf8', function read(err, contents) {
if(err)
reject(err)
else
resolve(contents)
});
}
}
var file = readMyFile(fileName).then(result=>{console.log(result);console.log('after calling readFile'); }).catch(err=>{console.log("Error Occurred",err)});
console.log(file);
var fs = require('fs');
function readMyFile(fileName)
{
return new Promise(function(resolve,reject)
{
fs.readFile(fileName, 'utf8', function read(err, contents) {
if(err)
reject(err)
else
resolve(contents)
});
}
}
async function read()
{
var file = await readMyFile(fileName);
console.log(file);
}
在这里等待,直到文件变量获得其值