如何在nodejs中传递值并进行多次回调



我是javascript语法的初学者,我正在努力理解nodejs中的异步回调。我正在尝试执行这段包含两个基本函数的小代码。

function compute (n1,n2,callback){
callback(n1,n2);
}
function sum(n1,n2,callback){
console.log(n1+n2);
callback(n1,n2);
}
function product(n1,n2){
console.log(n1*n2);
}

compute(5, 3, function() {
sum(function (){
product();
});
});

在我尝试运行它之后,我得到了以下错误。

C:UsersHPNodejsnode-examplenode-infile-modulepractice.js:10
callback(n1,n2);
^
TypeError: callback is not a function
at sum (C:UsersHPNodejsnode-examplenode-infile-modulepractice.js:10:5)
at C:UsersHPNodejsnode-examplenode-infile-modulepractice.js:19:5
at compute (C:UsersHPNodejsnode-examplenode-infile-modulepractice.js:6:5)
at Object.<anonymous> (C:UsersHPNodejsnode-examplenode-infile-modulepractice.js:18:1)
at Module._compile (internal/modules/cjs/loader.js:1156:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
at Module.load (internal/modules/cjs/loader.js:1000:32)
at Function.Module._load (internal/modules/cjs/loader.js:899:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
at internal/main/run_main_module.js:18:47

由于nodejs支持闭包属性,该属性自动使用父函数中的参数,而无需明确提及,我不明白它为什么不将我的函数视为回调。此外,我想在我得到这个基本权利后实现错误优先的方法。我读了其他堆叠式的答案,但它们似乎太复杂了。请帮我

您需要为sum函数提供参数(现在,您正在将函数传递为n1,仅此而已(product函数:

function compute (n1,n2,callback){
callback(n1,n2);
}
function sum(n1,n2,callback){
console.log(n1+n2);
callback(n1,n2);
}
function product(n1,n2){
console.log(n1*n2);
}
//                     v   v
compute(5, 3, function(n1, n2) {
sum(n1, n2, product);
//  ^   ^      ^
});

function compute (n1,n2,callback){
callback(n1,n2);
}
function sum(n1,n2,callback){
console.log(n1+n2);
callback(n1,n2);
}
function product(n1,n2){
console.log(n1*n2);
}
compute(5, 3, function() {
var arg1 = 5;
var arg2 = 5;
// The sum function: type of `third argment` is `function`
sum(arg1, arg2, function (){
product();
});
}); 

更新

var arg1 = 5;
var arg2 = 5;
sum(arg1, arg2, function (){

您需要通过回调传递参数。

function compute(n1, n2, callback) {
callback(n1, n2);
}
function sum(n1, n2, callback) {
console.log(n1 + n2);
callback(n1, n2);
}
function product(n1, n2) {
console.log(n1 * n2);
}
compute(5, 3, function (arg1, arg2) {
sum(arg1, arg2, function (arg1, arg2) {
product(arg1, arg2);
});
});

最新更新