javascript中的ReferenceError消息?

javascript中的ReferenceError消息?,javascript,Javascript,为什么会出现以下错误:ReferenceError:result未定义“ 因为result在您传递到的回调中声明为,所以它在外部不存在 您可以在外部声明它,但请注意,它将不包含返回结果时的数据;行稍后: function returnData(){ var result; // <==== Note _myService.getData().then(function(data){ result = data; // <=

为什么会出现以下错误:ReferenceError:result未定义“


因为
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它。