代码之家  ›  专栏  ›  技术社区  ›  Arunprasanth K V

方法在数据为静态时工作,在从promise获取数据时归档

  •  0
  • Arunprasanth K V  · 技术社区  · 8 年前

    我有一个场景,比如我需要从api请求中获取一些数据,并在此基础上在屏幕上显示图像。

     return Class.extend({
    
          loadData: function (callbacks) {
            callbacks.onSuccess(
              [
                {
                  "id":"1",
                  "title":"Apple",
                  "img" : "static/img/fruit/apple.png"
                },
                {
                  "id":"2",
                  "title":"Banana",
                  "img" : "static/img/fruit/banana.png"
                },
                {
                  "id":"3",
                  "title":"Grapes",
                  "img" : "static/img/fruit/grapes.png"
                },
                {
                  "id":"4",
                  "title":"Orange",
                  "img" : "static/img/fruit/orange.png"
                },
                {
                  "id":"5",
                  "title":"Peach",
                  "img" : "static/img/fruit/peach.png"
                },
                {
                  "id":"6",
                  "title":"Pear",
                  "img" : "static/img/fruit/pear.png"
                }
              ]
    
            );
          }
        });
    

    当我使用上面的代码时,它工作得很好,但我需要来自api的数据,所以我实现了一个获取数据的方法,我也创建了一个承诺,但这个承诺不起作用

     return Class.extend({
          // You will probably want to do something more useful then returning static data
          loadData: function (callbacks) {
            callbacks.onSuccess(
              evtBind().then(function (res) {
                console.log("res", res); 
                return res; 
              })
            );
          }
        });
    
    function evtBind() {
    
      var device = RuntimeContext.getDevice();
      var get = function () {
        return new Promise(function (resolve, reject) {
          // do a thing, possibly async, then…
    
          device.executeCrossDomainGet('http://localhost:3000/result', {
            onSuccess: function (responseObject) {
    
              resolve(responseObject);
    
            },
            onError: function (response) {
              reject(response);
            }
          });
        });
      };
      return get();
    
    }
    

    我的代码与上面的代码类似。有人能帮我解决这个问题吗。

    1 回复  |  直到 8 年前
        1
  •  1
  •   nanobar    8 年前

    如果你得到了正确的数组 res 那你为什么不打电话给你的 onSuccess 使用阵列?现在你正在向 onSuccess成功 因此,如果您这样做,则必须调整那里的代码。

    loadData: function (callbacks) {
      evtBind().then(callbacks.onSuccess);
    }
    

    缩写为:

    loadData: function (callbacks) {
      evtBind().then(res => callbacks.onSuccess(res));
    }