javascript中的ReferenceError消息?
为什么会出现以下错误:ReferenceError:result未定义“javascript中的ReferenceError消息?,javascript,Javascript,为什么会出现以下错误:ReferenceError:result未定义“ 因为result在您传递到的回调中声明为,所以它在外部不存在 您可以在外部声明它,但请注意,它将不包含返回结果时的数据;行稍后: function returnData(){ var result; // <==== Note _myService.getData().then(function(data){ result = data; // <=
因为
result
在您传递到的回调中声明为,所以它在外部不存在
您可以在外部声明它,但请注意,它将不包含返回结果时的数据;
行稍后:
function returnData(){
var result; // <==== Note
_myService.getData().then(function(data){
result = data; // <==== No `var` here
})
// WON'T HAVE THE VALUE HERE, it's too soon
return result;
}
…并在调用代码中使用then
来接收它。同样地,returnData
不能返回数据。因为result
在您传入then
的回调中声明为。它在外部不存在
您可以在外部声明它,但请注意,它将不包含返回结果时的数据;
行稍后:
function returnData(){
var result; // <==== Note
_myService.getData().then(function(data){
result = data; // <==== No `var` here
})
// WON'T HAVE THE VALUE HERE, it's too soon
return result;
}
…然后在调用代码中使用来接收它。同样地,returnData
无法返回数据。我假设调用\u myService.getData()
是对web服务进行异步调用
在这种情况下,您可以按如下方式返回服务响应数据:
function returnData() {
return _myService
.getData()
.then(function(data) {
// Here you can work with the response data
return data;
});
}
请注意,您可以在回调中使用响应
,因为您正确地传递到然后
,我假设调用\u myService.getData()
就是对web服务进行异步调用
在这种情况下,您可以按如下方式返回服务响应数据:
function returnData() {
return _myService
.getData()
.then(function(data) {
// Here you can work with the response data
return data;
});
}
请注意,您可以在回调中使用响应
,因为您正确地传递到中,然后
@Yosvel的答案是正确的,原因是您正在对服务进行异步调用
执行此操作时,您必须等待结果返回给您,然后可以在then函数中处理该结果
如果有两个返回调用,则返回值是未定义的,因为它不等待回调函数,而只是返回一个空值。@Yosvel的回答是正确的,原因是您正在对服务进行异步调用
执行此操作时,您必须等待结果返回给您,然后可以在then函数中处理该结果
通过两个返回调用,您的返回值是未定义的,因为它不等待回调函数,而只是返回一个空值。可能重复@nvioli:这当然是非常密切相关的,但OP询问的实际错误是一个范围问题。但同样,非常密切相关。可能重复@nvioli奥利:这当然是非常密切相关的,但OP询问的实际错误是一个范围问题。但同样,非常密切相关。为什么?有什么不同?为什么重要?一个好的答案应该解释问题。另外:这个然后处理程序没有任何用途。它应该是函数returnData(){return\u myService.getData();}
如果它真的存在(正如我在回答中所说的那样)。两件事:1.你在我的评论后更改了代码。你的had。然后(函数(数据){return data;})
这是我所指的完全没有意义的东西。2.从问题中我们可以看出,新代码是错误的。问题中没有任何迹象表明回调接收到的值具有数据属性,或者OP想要该属性而不是整个值。这不是更好或更干净。有时我们可能会我需要这样的转换,但我们没有理由认为我们需要这样做。基于我的假设,调用\u myService.getData()
就是对web服务进行异步调用。哦,我不认为这是一个假设,我们可以非常确定它是异步的(并且对的回调保证是异步的)。但这也无关紧要。传递给回调的形状与它是同步的还是异步的无关。它与getData
的承诺解析值有关,该值未指定,但我们可以从问题中的代码中看到,他们想要的是整件事,而不仅仅是为什么?有什么不同?为什么重要?一个好的答案应该解释一下。另外:这个然后处理程序没有任何用途。如果它真的存在的话,它应该是函数returnData(){return\u myService.getData()}
(正如我在回答中所说的).两件事:1.你在我的评论后更改了代码。你的had。然后(函数(数据){returndata;})
这是我所指的完全没有意义的东西。2.从问题中我们可以看出,新代码是错误的。问题中没有任何迹象表明回调接收到的值具有数据属性,或者OP想要该属性而不是整个值。这不是更好或更干净。有时我们可能会我需要这样的转换,但我们没有理由认为我们需要这样做。基于我的假设,调用\u myService.getData()
就是对web服务进行异步调用。哦,我不认为这是一个假设,我们可以非常确定它是异步的(并且对的回调保证是异步的)。但这也无关紧要。传递给回调的形状与它是同步的还是异步的无关。它与getData
的承诺解析值有关,该值未指定,但我们可以从问题中的代码中看到,他们想要的是整件事,而不仅仅是f它。