我的代码卡住了。
我编写此示例代码只是为了重现我的问题,所以这段代码根本不实用,但我希望你明白我的观点。
在下面的代码中,对于要输出的最后一个值,我希望它是3,但它未定义。
如果我想在这种情况下将最后一个值设为3,我该怎么写?
这只是一个示例代码,但在实际代码中,我从amazon api获取内容,当它返回api错误时,我想在1000毫秒后再次运行相同的函数。
var list = [1,2,3];
var someClass = new SomeClass();
list.forEach(function(value) {
var result = someClass.getSomething(value);
console.log("outside: " + result);
});
function SomeClass() {
var flag = false;
this.getSomething = function(something) {
if (something === 3 && flag === false) {
flag = true;
this.getSomething(something);
//I need to return here, so the succeeding code is not read.
return;
}
console.log("inside: " + String(something));
return something;
}
}
日志
inside: 1
outside: 1
inside: 2
outside: 2
inside: 3
outside: undefined // I expect this value to be 3!!!
答案 0 :(得分:4)
你有一个测试:
if (something === 3 && flag === false) { //... return;
如果您想要返回3
,则不要在其后面没有任何内容的return
语句。 return
表示return undefined
。放return 3
或return something
。
您可能希望从递归通话中返回:
return this.getSomething(something);
答案 1 :(得分:1)
问题在于:
function SomeClass() {
var flag = false;
this.getSomething = function(something) {
if (something === 3 && flag === false) {
flag = true;
this.getSomething(something); // not returning this
return; // returning undefined
}
console.log("inside: " + String(something));
return something;
}
}
以下是修复:
function SomeClass() {
var flag = false;
this.getSomething = function(something) {
if (something === 3 && flag === false) {
flag = true;
return this.getSomething(something);
}
console.log("inside: " + String(something));
return something;
}
}
答案 2 :(得分:0)
将代码更改为
if(某事=== 3&& flag === false) {
flag = true;
return this.getSomething(something);
}
“返回”;返回undefined
答案 3 :(得分:0)
它会在您的代码中返回undefined
,因为您在return;
子句中if
。
return this.getSomething(something)
子句中的 if
var list = [1, 2, 3];
var someClass = new SomeClass();
list.forEach(function(value) {
var result = someClass.getSomething(value);
console.log("outside: " + result);
});
function SomeClass() {
var flag = false;
this.getSomething = function(something) {
if (something === 3 && flag === false) {
flag = true;
return this.getSomething(something);
}
console.log("inside: " + String(something));
return something;
}
}
答案 4 :(得分:-1)
forEach循环不返回值。 您可以创建一个全局变量并为其赋值。