人们从哪里获得cb(),这是一个Node事物还是vanilla事物?
例如:
Managing Node.js Callback Hell with Promises, Generators and Other Approaches
他们使用cb()来猜测回调并在某些情况下返回错误或值或两者,具体取决于回调函数sig是什么?
答案 0 :(得分:34)
cb
在你正在描述的上下文中是如何将一个vanilla回调函数传递给(通常)异步函数,这是node.js中的常见模式(有时候它是标记为下一个,但如果您愿意,可以将其称为bananas
- 它只是一个参数。)
通常,第一个参数是error
对象(通常是假的 - 如果一切都按计划进行),后续参数是某种形式的数据。
例如:
function myAsyncFunction(arg1, arg2, cb) {
// async things
cb(false, { data: 123 });
}
然后使用此功能:
myAsyncFunction(10, 99, function onComplete(error, data) {
if (!error) {
// hooray, everything went as planned
} else {
// disaster - retry / respond with an error etc
}
});
Promise是此设计模式的替代方案,您可以从myAsyncFunction
返回Promise object
例如:
function myAsyncFunction2(arg1, arg2) {
return new Promise(function resolution(resolve, reject, {
// async things
resolve({ data: 123 });
});
}
然后使用此功能:
myAsyncFunction2(10, 99)
.then(function onSuccess(data) {
// success - send a 200 code etc
})
.catch(function onError(error) {
// oh noes - 500
});
他们基本上是一回事,只是略有不同。以原生形式承诺aren't supported especially widely,但如果在构建步骤中通过转换器(我建议babel),它们应该在浏览器中足够可靠地执行。
回调将始终在没有填充/转换的浏览器中工作。
答案 1 :(得分:2)
node.js有许多异步操作,它们将完成回调作为参数。这在各种node.js API中非常常见。
此回调的node.js约定是传递给回调的第一个参数是错误代码。第一个参数的falsey值表示没有错误。
例如:
fs.readFile("test.txt", function(err, data) {
if (!err) {
console.log("file data is: " + data);
}
});
您自己创建的函数也可以定义它自己的回调,以便传达一个或多个异步操作的结束。
function getData(id, cb) {
var fname = "datafile-" + id + ".txt";
fs.readFile(fname, function(err, data) {
if (err) {
cb(err);
} else if (data.slice(0, 6) !== "Header"){
// proper header not found at beginning of file data
cb(new Error("Invalid header"));
} else {
cb(0, data);
}
});
}
// usage:
getData(29, function(err, data) {
if (!err) {
console.log(data);
}
});
答案 2 :(得分:0)
从Vanilla JS中,您可以声明一个函数并将throuw参数传递给另一个函数的声明,该函数可以称为async
OpenSubKey() returns null for a registry key that I can see in regedit.exe