This question already has answers here:
How do I return the response from an asynchronous call?
(36个答案)
去年关闭。
** Java的新手。请帮忙 **
我正在用Javascript写一个简单的“ for”循环,但没有得到预期的输出。寻求帮助。
makeARestCall(options)-函数对服务进行Rest调用并获取一些数据。
getCount(body)-从从makeARestCall函数接收的JSON返回一个值。
我如何执行:使用Javascript编写Mocha测试。
当前输出是什么:
我期待什么?
似乎“ for”循环运行得如此之快,makeARestcall需要花费一些时间来执行,因为执行需要花费几秒钟的时间。请帮助我如何获得所需的输出。
确保使用
(36个答案)
去年关闭。
** Java的新手。请帮忙 **
我正在用Javascript写一个简单的“ for”循环,但没有得到预期的输出。寻求帮助。
for (i = 1; i < 5; i++) {
console.log(i + ": " + makeARestCall(options));
}
function makeARestCall(options) {
request(options, function(error, response, body) {
if (error) throw new Error(error);
let test = getCount(body);
console.log("Hello: " + test);
});
}
function getCount(body) {
const data = JSON.parse(body.toString()).test.all;
return data;
}
makeARestCall(options)-函数对服务进行Rest调用并获取一些数据。
getCount(body)-从从makeARestCall函数接收的JSON返回一个值。
我如何执行:使用Javascript编写Mocha测试。
当前输出是什么:
1: undefined
2: undefined
3: undefined
4: undefined
Hello: 35
Hello: 35
Hello: 35
Hello: 35
我期待什么?
1: Hello: 35
2: Hello: 35
3: Hello: 35
4: Hello: 35
似乎“ for”循环运行得如此之快,makeARestcall需要花费一些时间来执行,因为执行需要花费几秒钟的时间。请帮助我如何获得所需的输出。
最佳答案
request
异步运行,而不是同步运行,并且makeARestCall
当前不返回任何内容。您可能应该让makeARestCall
返回一个Promise,然后在for
循环中使用它:
for (let i = 1; i < 5; i++) {
makeARestCall(options)
.then(responseStr => console.log(i + ': ' + responseStr));
}
function makeARestCall(options) {
return new Promise((resolve, reject) => {
request(options, function(error, response, body) {
if (error) reject(error);
let test = getCount(body);
resolve("Hello: " + test);
});
});
}
确保使用
let i
而不是var
或根本没有声明,否则i
将被提升到外部块,并且在所有请求返回后将具有相同的值(5)。 (尝试避免隐式创建全局变量)09-27 01:07