回调不等待函数完成执行
Callback not waiting for function to finish executing
我有一个回调函数,returns 来自数据库的一个对象。但是,在我的 async.waterfall 中,函数 'external' 不等待对象完全加载,这意味着它在传入时未定义。这意味着我的最终错误是 TypeError: Cannot read property 'replace' of undefined
。我做错了什么?
function loadModelInstance (name, callback) {
Model.findOne({ name: name }, function (_err, result) {
if (result) {
return callback(_err, result.content)
}
})
}
function generatedNow (modelInstance) {
generatedKeys = generatedKeys.concat(getAllMatches(generatedRegexp, modelInstance.replace(/(\n|\r)/g, '')));
}
async.waterfall(
[
function loadTemplate (wfaCallback) {
loadModelInstance(name, function (_err, modelInstance) {
wfaCallback(_err, modelInstance)
})
},
function external (modelInstance, wfaCallback) {
generatedNow(tracking, message, modelInstance, placeholders, function (err, updatedPlaceholders) {
})
},
],
function (err) {
// Node.js and JavaScript Rock!
}
);
能否请您提供更多详细信息。你在哪里调用 "generateNow" 函数。我没有看到 "generateNow" 的函数调用。
看来你没有正确使用参数顺序。下面的代码应该可以工作。
async.waterfall(
[
function loadTemplate(wfaCallback) {
loadModelInstance(name, function(_err, modelInstance) {
wfaCallback(_err, modelInstance);
});
},
function external(err, modelInstance, wfaCallback) {
generatedNow(modelInstance, tracking, message, placeholders, function(
err,
updatedPlaceholders
) {});
}
],
function(err) {
// Node.js and JavaScript Rock!
}
);
我有一个回调函数,returns 来自数据库的一个对象。但是,在我的 async.waterfall 中,函数 'external' 不等待对象完全加载,这意味着它在传入时未定义。这意味着我的最终错误是 TypeError: Cannot read property 'replace' of undefined
。我做错了什么?
function loadModelInstance (name, callback) {
Model.findOne({ name: name }, function (_err, result) {
if (result) {
return callback(_err, result.content)
}
})
}
function generatedNow (modelInstance) {
generatedKeys = generatedKeys.concat(getAllMatches(generatedRegexp, modelInstance.replace(/(\n|\r)/g, '')));
}
async.waterfall(
[
function loadTemplate (wfaCallback) {
loadModelInstance(name, function (_err, modelInstance) {
wfaCallback(_err, modelInstance)
})
},
function external (modelInstance, wfaCallback) {
generatedNow(tracking, message, modelInstance, placeholders, function (err, updatedPlaceholders) {
})
},
],
function (err) {
// Node.js and JavaScript Rock!
}
);
能否请您提供更多详细信息。你在哪里调用 "generateNow" 函数。我没有看到 "generateNow" 的函数调用。
看来你没有正确使用参数顺序。下面的代码应该可以工作。
async.waterfall(
[
function loadTemplate(wfaCallback) {
loadModelInstance(name, function(_err, modelInstance) {
wfaCallback(_err, modelInstance);
});
},
function external(err, modelInstance, wfaCallback) {
generatedNow(modelInstance, tracking, message, placeholders, function(
err,
updatedPlaceholders
) {});
}
],
function(err) {
// Node.js and JavaScript Rock!
}
);