Javascript:同步执行
Javascript: Synchronous execution
** Javascript 的新手。请帮忙**
我正在 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) - returns 来自 makeARestCall 函数的 JSON 的值。
我如何执行:使用 Javascript.
编写摩卡测试
当前输出是多少:
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
当前不 return 任何东西。您可能应该有 makeARestCall
return 一个 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) 一次所有的请求都回来了。 (尽量避免隐式创建全局变量)
** Javascript 的新手。请帮忙**
我正在 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) - returns 来自 makeARestCall 函数的 JSON 的值。
我如何执行:使用 Javascript.
编写摩卡测试当前输出是多少:
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
当前不 return 任何东西。您可能应该有 makeARestCall
return 一个 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) 一次所有的请求都回来了。 (尽量避免隐式创建全局变量)