javascript - 方法在数据静态时工作,并在从 Promise 获取数据时归档

标签 javascript async-await es6-promise

我有一个场景,比如我需要从 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 的数据,所以我实现了一种获取数据的方法,并且我也创建了一个 promise ,但是这个不起作用

 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();

}

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

最佳答案

如果您在 res 中获得了正确的数组,那么为什么不使用该数组调用 onSuccess 呢?目前,您正在向 onSuccess 传递一个 promise ,因此如果您这样做,则必须调整那里的代码。

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

其缩写为:

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

关于javascript - 方法在数据静态时工作,并在从 Promise 获取数据时归档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48985588/

相关文章:

javascript - 需要帮助修复 JavaScript 中的 setInterval 问题

javascript - 在选项卡式导航中打开模式 - Bootstrap 3 & Rails 4

c# - 嵌套异步/等待方法

c# - 异步/等待和任务

c# - 为什么我不能将异步查询移动到方法中?

javascript - 优雅地处理 `await` ed Javascript Promise 上的拒绝

javascript - 获取 api - 在 then 和 catch block 中获取 json 主体以获得单独的状态代码

javascript - 渲染从 SailsJS Controller 返回的 HTML 内容

javascript - promise ,传递额外的参数到 then 链

javascript - 如何在 IndexedDB 中创建多个对象存储