首页 > 解决方案 > 从 esriRequest 回调外部获取响应数据

问题描述

我正在尝试使用“esri/request”从休息服务中获取数据。我的问题是如何从这个请求中获取响应数据并在其他函数中使用它。但是不知道如何在 fromOutSide() 下面不使用 window 变量。

https://developers.arcgis.com/javascript/3/jsapi/esri.request-amd.html

终于找到了从外部获取变量的方法,然后使用下面的 lang.hitch 代码

define([
    'dojo',
    'dojo/_base/declare',
    'jimu/BaseWidget',
    'dojo/_base/array',
    'dojo/_base/lang',
    'esri/request'
],
function(
    dojo,
    declare,
    BaseWidget,
    array,
    lang,
    esriRequest,
) {
    // Run

    this.getMapService;


    getMapService: function() {
        var requestHandle = esriRequest({
            url: "https://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer/0?f=pjson",
            content: {
                f: "json"
            },
            handleAs: "json",
            callbackParamName: "callback"
        });
        requestHandle.then(this.requestSucceeded, this.requestFailed);
        
    },

    requestSucceeded: function(response, io) {
        let responseVar = response;
        console.log(responseVar);
    },

    requestFailed: function(error, io) {
        console.log(error);

    },

    fromOutSide: function() {
        // ? ? ? ?
        console.log(myVar);

    }

});




Updated code: After lang.hitch I was able to use my variables inside .then 
=========================================================


define([
    'dojo/_base/lang',
    'esri/request'
  ],
  function (
    lang,
    esriRequest
  ) {
    return declare([BaseWidget], {
      
      getWindDirection: function () {
          this.requestHandleNode.innerHTML = "";
          
          requestArgs = {
          url: this.config.windDirRestUrl,
          content: {
            f: "json"
            },
          handleAs: "json",
          callbackParamName: "callback",
            };
          
          esriRequest(requestArgs).then(lang.hitch(this, function (response) {
                                            this.requestSucceeded(response);
                                        }),
                                        lang.hitch(this, function (error) {
                                            this.requestFailed(error);
                                        })
            );               
      },
      
      requestSucceeded: function (response, io){
          this.showWindDirection(response);

      },
        
      requestFailed: function (error){
          console.log(error);
          
      },
      
      showWindDirection: function (response){
          console.log(response)
            
      }
      
    });
  });

标签: javascriptcallbackdojodeferredesri

解决方案


推荐阅读