在自定义dojo模块中的xhr请求后调用兄弟方法

Calling sibling method after xhr request in custom dojo amd module

本文关键字:请求 调用 兄弟 方法 xhr 自定义 dojo 模块      更新时间:2023-09-26

我有一个自定义模块的dojo的amd,将是这样的:

define(
  "my/moduleName",
  [//dependencies], 
  function(xhr) {
    return {
      method1: function() {
        xhr.get({
          url: "myurl",
          load: function(data) {
            //handle data
            this.method2(data) //< THIS CAUSES ERROR: 'this.method2 is not a function'
          }
        });
      },
      method2: function(data) {
        //process data
      }
    }
}

我怀疑我的问题是xhr.get创建了一个延迟的对象,而method2没有在该对象中定义,而是在"my/module"对象上定义。

xhr完成后,method1如何呼叫method2 ?

您需要存储当前this上下文,因为一旦您进入load函数上下文,this就是xhr对象。

一个常见的约定是var that = this;,然后根据需要在任何其他闭包中使用that

在调用之前存储this,类似于:

define(
    "my/moduleName", [ //dependencies], 
function (xhr) {
    return {
        method1: function () {
            var that = this; //<-- store this context
            xhr.get({
                url: "myurl",
                load: function (data) {
                    //handle data
                    that.method2(data); //<-- use that , the stored context
                }
            });
        },
        method2: function (data) {
            //process data
        }
    }
}

DEMO -存储this以便以后在另一个闭包中使用