【发布时间】:2020-01-05 06:08:58
【问题描述】:
从 NodeJS 的学习曲线开始,我尝试使用 async.series 调用一系列函数。每个函数都是一个使用 REST 远程调用的命令行。
function TestStorageDeviceBasic()
{
scenario = [
'cmdline1',
'cmdline2'
];
tasks = [];
scenario.forEach(command => { tasks.push(RunCommand(sessionId,command));});
async.series(tasks);
}
function RunCommand(sessionId, cmdLine)
{
var options = {
uri: `http://${domain}/api/v1/commands`,
method: 'POST',
json: {
'session-id' : `${sessionId}`,
'command-line': `${cmdLine}`
}
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
log.debug(`\"${cmdLine}\" status code successful`)
log.debug(body);
}
else
log.error(`\"${cmdLine}\" status code failed`,error);
});
}
尽管似乎调用了 RunCommand 函数,但我遇到了一些问题。
(node:21008) UnhandledPromiseRejectionWarning: Error: expected a function
at wrapAsync (C:\work\MyJavascriptProject\my_sample\node_modules\async\dist\async.js:198:50)
at C:\work\MyJavascriptProject\my_sample\node_modules\async\dist\async.js:2952:13
为什么 RunCommand 不被视为函数?
【问题讨论】:
-
您正在 调用
RunCommand并将函数的结果推送到任务中。RunCommand的结果不是函数。您可以尝试使用.bind()使用捕获的参数创建一个函数。 -
关于使用异步第三方的评论:最好使用异步等待(developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…)