Node.js Node async.js:回调不是函数错误吗?
我有以下代码:Node.js Node async.js:回调不是函数错误吗?,node.js,async.js,Node.js,Async.js,我有以下代码: async = require('async') async.auto({ getUserName: function(callback) { console.log('**In getUserName.**') callback(null, 'Lem') }, connectToDb: function(callback) { console.log('**In connectToDb.**') var co
async = require('async')
async.auto({
getUserName: function(callback) {
console.log('**In getUserName.**')
callback(null, 'Lem')
},
connectToDb: function(callback) {
console.log('**In connectToDb.**')
var connected = true
if(connected) {
callback(null, connected)
} else {
callback('Error connecting to DB.', null)
}
},
checkIfUserExist: [
'getUserName',
'connectToDb',
function(callback, results) {
console.log('**In checkIfUserExist.**',
JSON.stringify(results))
var userExist = false
if(userExist) {
callback('User exist in DB.')
} else {
setTimeout(
function() {
callback(null, userExist);
},
1000
);
}
}
],
signup: [
'checkIfUserExist',
function(callback, results) {
console.log('**In signup**', JSON.stringify(results))
var userName = results.getUserName
var isDbConnected = results.connectToDb
var userExist = result.checkIfUserExist
if(userName && isDbConnected && !userExist) {
callback(null,
{'status': '200', 'msg': 'Successfully signed up user'})
} else {
callback('Error signing up user.', null)
}
}
]
},
function(error, results) {
console.log('error = ', error)
console.log('results = ', results)
})
为什么我会遇到此错误:
**In getUserName.**
**In connectToDb.**
error = function () {
if (fn === null) throw new Error("Callback was already called.");
var callFn = fn;
fn = null;
callFn.apply(this, arguments);
}
results = undefined
**In checkIfUserExist.** undefined
^[[A/home/lem/js/async/asyncAuto.js:30
callback(null, userExist);
^
TypeError: callback is not a function
at Timeout._onTimeout (/home/lem/js/async/asyncAuto.js:30:13)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5)
异步函数,期望回调作为其最后一个参数。这是我的工作代码
var async = require('async');
async.auto({
getUserName: function(callback) {
console.log('**In getUserName.**')
callback(null, 'Lem')
},
connectToDb: function(callback) {
console.log('**In connectToDb.**')
var connected = true
if(connected) {
callback(null, connected)
} else {
callback('Error connecting to DB.', null)
}
},
checkIfUserExist: [
'getUserName',
'connectToDb',
function(results, callback) {
console.log('**In checkIfUserExist.**',
JSON.stringify(results))
var userExist = false
if(userExist) {
callback('User exist in DB.')
} else {
setTimeout(function() {
callback(null, userExist);
},1000);
}
}
],
signup: [
'checkIfUserExist',
function(results, callback) {
console.log('**In signup**', JSON.stringify(results))
var userName = results.getUserName
var isDbConnected = results.connectToDb
var userExist = results.checkIfUserExist
if(userName && isDbConnected && !userExist) {
callback(null,
{'status': '200', 'msg': 'Successfully signed up user'})
} else {
callback('Error signing up user.', null)
}
}
],
},
function(error, results) {
console.log('error = ', error)
console.log('results = ', results)
})
函数(回调,结果)应该是函数(结果,回调)
请检查此url以供参考。
在v2中,async的
auto
方法发生了突破性的变化,您似乎在使用它。
自动任务函数现在总是将回调作为最后一个参数。如果任务具有依赖项,则结果对象将作为第一个参数传递。要迁移旧的任务函数,请使用u.flip包装它们
在您的中,而不是:注册:['checkIfUserExist',函数(回调,结果){使用:注册:['checkIfUserExist',函数(err,结果){node.js实际上做的是首先检查每个函数中的错误,然后以回调的形式给出结果。您所做的就像是将回调作为错误传递给它,它会向您发送错误消息。仍然有错误请参见下面的注释。这意味着什么?在getUserName.in connectToDb.error=function(){if(fn==null)抛出新错误(“已调用回调”);var callFn=fn;fn=null;callFn.apply(这是参数);}results=checkIfUserExist中未定义。{“getUserName”:“Lem”,“connectToDb”:true}在注册{“getUserName”:“Lem”,“connectToDb”:true,“checkIfUserExist”:false}结果是花括号的方向错误。是的,花括号丢失了,我已经更新了代码,现在一切都好了。