3 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
var myCallback = function(data) {
console.log('got data: '+data);
};
var usingItNow = function(callback) {
callback('get it?');
};
現(xiàn)在打開(kāi)節(jié)點(diǎn)或?yàn)g覽器控制臺(tái)并粘貼上面的定義。
最后在下一行使用它:
usingItNow(myCallback);
關(guān)于節(jié)點(diǎn)式錯(cuò)誤約定
Costa問(wèn)我們?nèi)绻袷毓?jié)點(diǎn)錯(cuò)誤回調(diào)約定會(huì)是什么樣子。
在此約定中,回調(diào)應(yīng)該期望至少接收一個(gè)參數(shù),即第一個(gè)參數(shù),作為錯(cuò)誤。可選地,我們將具有一個(gè)或多個(gè)附加參數(shù),具體取決于上下文。在這種情況下,上下文是我們上面的例子。
在這里,我在這個(gè)約定中重寫(xiě)了我們的例子。
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
};
如果我們想模擬錯(cuò)誤情況,我們可以像這樣定義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);
行為的唯一區(qū)別取決于usingItNow您定義的版本:向第一個(gè)參數(shù)的回調(diào)提供“truthy值”(一個(gè)Error對(duì)象)的那個(gè),或者為錯(cuò)誤參數(shù)提供null的那個(gè)版本。 。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
這里是復(fù)制文本文件的例子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
函數(shù)的一個(gè)例子:
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模式表明回調(diào)函數(shù)的第一個(gè)參數(shù)是錯(cuò)誤。您應(yīng)該使用此模式,因?yàn)樗锌刂屏髂K都依賴(lài)于它:
next(new Error('I cannot do it!')); // errornext(null, results); // no error occurred, return result
添加回答
舉報(bào)