【问题标题】:Returning a dataobject from promise.success function从 promise.success 函数返回一个数据对象
【发布时间】:2016-11-22 02:32:20
【问题描述】:

我正在发出 AJAX 请求,但在处理承诺响应时遇到了问题。在示例中,AJAX 请求是在未显示但称为“requestOriginalDataFromAjax()”的函数内部发出的。

在“promise”形式中它是不可用的,需要用promise.success 函数转换成一个普通的数据对象。但是将promise.success 函数的数据传出是我遇到麻烦的地方。返回的数据总是返回undefined

这是一个例子:

private convertPromise(){

      let requestedData:any = this.requestOriginalDataFromAjax();

      let promise:any = requestedData;

      promise.success(function (data) {
          console.log("data inside my converter: ");
          console.log(data);
          return data;
      });
}

private needToDoSomethingWithTheDataNow(){

      let convertedData:any = this.convertPromise();

      console.log("returned data: ");
      console.log(convertedData);
}

这里是控制台输出:

data inside my converter:
full_data_object: ["blah":"blah"]

returned data:
undefined 

我知道过去有人问过这个问题,但经过我所有的研究和阅读,基于之前的例子,我仍然无法理解。

【问题讨论】:

  • promise 上的 return 语句在 lambda 内部返回。 convertPromise 函数没有返回任何内容,因此未定义。
  • @JuanmaSerrano 我将值保存到函数外部的变量中并尝试返回它,但它仍然未定义。语法是什么样的?

标签: javascript jquery ajax typescript promise


【解决方案1】:

你需要在convertPromise函数中返回promise,然后在调用者中正确消费:

private convertPromise(){

  let requestedData:any = this.requestOriginalDataFromAjax();

  let promise:any = requestedData;

  promise.success(function (data) {
      console.log("data inside my converter: ");
      console.log(data);
      return data;
  });

  return promise;

}

私人需要ToDoSomethingWithTheDataNow(){

  let convertedDataPromise:any = this.convertPromise();

  convertedDataPromise.success((function(convertedData) {
    console.log("returned data: ");
    console.log(convertedData);
  });

}

【讨论】:

  • 但这是多余的。转换器的目的只是使 Promise 成为一个普通的数据对象并以这种形式传递它。这可能吗?
  • 啊,我明白了,不。如果您正在处理承诺,那么一切都必须在一个之内。如果有帮助,您可以从 Promise 中调用回调。但实际上,一旦你沿着承诺的路线走下去,那么一切都需要在 .then / .success / .error 逻辑内
  • 感谢您回答了所有问题!
猜你喜欢
  • 2018-12-29
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 2012-07-17
相关资源
最近更新 更多