回调的NodeJS简单的例子回调的NodeJS简单的例子(nodeJs callbacks simp

2019-05-08 21:19发布

任何一个可以给我的回调的NodeJS机管局简单的例子,我已经搜索了很多网站,但不能正确理解它是相同的,请给我一个简单的例子。

getDbFiles(store, function(files){
    getCdnFiles(store, function(files){
    })
})

我想要做这样的事情?

Answer 1:

var myCallback = function(data) {
  console.log('got data: '+data);
};

var usingItNow = function(callback) {
  callback('get it?');
};

现在打开节点或浏览器控制台,并粘贴上述定义。

最后这个下一行使用它:

usingItNow(myCallback);

相对于节点样式错误约定

科斯塔问这个是什么样子,如果我们要兑现节点错误回调约定。

在此约定,回调应该会收到至少有一个参数,第一个参数,是一个错误。 可选的,我们将有一个或多个其他参数,根据上下文。 在这种情况下,上下文是我们上面的例子。

在这里,我重写这个惯例我们的榜样。

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您已经定义:一,对于第一个参数馈送“truthy值”(Error对象)到回调,或喂它空的错误之一论点。



Answer 2:

回调函数是简单地传递到另一个功能,使功能可以在稍后的时间把它的功能。 这通常出现在异步API S; 因为它是异步API调用将立即返回,所以你传递一个函数到它,当它完成其执行异步任务的API可以调用。

我能想到的JavaScript中最简单的例子是setTimeout()函数。 这是一个接受两个参数的全局函数。 第一个参数是回调函数,第二个参数是在毫秒的延迟。 该功能的目的是等待的时间适量,然后调用回调函数。

setTimeout(function () {
  console.log("10 seconds later...");
}, 10000);

你可能已经看过上面的代码,但只是没有意识到你在传递被称为一个回调函数的函数。 我们可以把上面的代码,使之更加明显。

var callback = function () {
  console.log("10 seconds later...");
};
setTimeout(callback, 10000);

回调使用遍布节点的地方,因为节点是从地上爬起来,是因为它做的一切异步的。 甚至聊到文件系统的时候。 这就是为什么一吨的内部节点API的接受回调函数作为参数,而不是返回可以分配给一个变量的数据。 相反,它会调用回调函数,传递你想作为参数数据。 例如,你可以使用节点的fs库读取文件。 该fs模块暴露了两个独特的API函数: readFilereadFileSync

readFile功能是异步的,而readFileSync显然不是。 你可以看到,他们打算让你来只要有可能,因为他们称他们使用异步调用readFilereadFileSync代替readFilereadFileAsync 。 下面是使用这两种功能的一个例子。

同步:

var data = fs.readFileSync('test.txt');
console.log(data);

上述块的线程执行,直到所有的内容代码test.txt被读入存储器,并存储在变量data 。 在这个节点通常被认为是不好的做法。 有很多次,虽然当它是有用的,比如写一个小巧的脚本,做一些简单而乏味的时候,你不那么在意节省时间每纳秒,你可以。

异步(回调):

var callback = function (err, data) {
  if (err) return console.error(err);
  console.log(data);
};
fs.readFile('test.txt', callback);

首先,我们创建一个接受两个参数的回调函数errdata 。 异步函数的一个问题是,它变得捕获错误更难让很多回调风格的API传失误作为第一个参数给回调函数。 这是检查的最佳实践err有一个值,你做任何事情之前。 如果是这样,停止回调的执行和记录错误。

当有抛出的异常,因为你可以简单地用一个抓住他们同步调用有优势try/catch块。

try {
  var data = fs.readFileSync('test.txt');
  console.log(data);
} catch (err) {
  console.error(err);
}

在异步函数它不工作的方式。 因此没有赶上与API调用立即返回try/catch 。 使用回调总能察觉自己的错误,然后适当的异步API传送这些错误步入回调,你可以处理它,你认为合适的。

此外,虽然回调,有API,它是一种常用称为承诺的另一种流行的风格。 如果您想了解他们,那么你可以阅读整个博客文章中,我根据这个答案写在这里 。



Answer 3:

这里是复制文本文件的例子fs.readFilefs.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


Answer 4:

尝试这个例子一样简单,你可以读,只是副本保存newfile.js做节点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);
});


Answer 5:

我们创建了一个简单的功能

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
}


Answer 6:

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”是一个节点模块,可以帮助你读取文件。 回调函数将确保您的文件名为“input.txt中”它被执行之前完全读取。 fs.stat()函数来得到这样的文件大小,创建日期和修改日期的文件信息。



文章来源: nodeJs callbacks simple example