在SAPUI5中完成获取异步函数的值

时间:2019-08-09 12:24:21

标签: javascript sapui5

变量server = gevent.wsgi.WSGIServer(('', 80), someWSGIApp) gevent.signal(signal.SIGTERM, server.stop) server.serve_forever() gevent.get_hub().join() 应该是包含很多项的数组。
项目将被逐个推入datelist函数中的列表中。

以下示例中的oModel.attachRequestComplete()列出了所有必需项(10个项)。
但是,console.log(datelist)属性是datelist.length

数组如何包含10个元素,但其长度为0

预期结果:

  • 0应该包含所有项目
  • datelist应该是datelist.length
> 0

1 个答案:

答案 0 :(得分:1)

oModel.loadData将异步请求数据。
请求完成后,将调用您传递给attachRequestCompleted的回调(执行将在loadData()阻塞,直到有可用数据为止)

运行console.log(datelist, datelist.length);行时,datelist仍将是一个空数组。
之所以可以在浏览器控制台中看到数组中的项目,是因为检查请求时该请求已经完成。 您可以在浏览器控制台中尝试以下操作:

var arr = [];
console.log(arr, arr.length); // [], 0
arr.push(1); arr.push(2); arr.push(3);
// console.log(arr, arr.length); // [1,2,3], 3

第一个日志将输出数组,当您对其进行检查时,项目将在此处-当您访问.length时它们还不存在。

要解决此问题,您可以将datelist保留在请求完成的处理程序中:

var oModel = new sap.ui.model.json.JSONModel();

oModel.attachRequestCompleted(function() {
  var oFeiertageBerlin = oModel.getData().BE;
  var datelist = [];
  for (var prop in oFeiertageBerlin) {
    datelist.push(oFeiertageBerlin[prop].datum);
  }

  console.log(datelist, datelist.length);
  // do something with the datelist here
});


var jDatum = new Date();
var jLink = "https://feiertage-api.de/api/?jahr=" + jDatum.getFullYear();
oModel.loadData(jLink);

使用sapui,您可以将数组作为json模型返回,然后可以绑定到视图中:

function loadHolidays() {
  var result = new sap.ui.model.json.JSONModel({datelist: []});
  var oModel = new sap.ui.model.json.JSONModel();
  oModel.attachRequestCompleted(function() {
    var oFeiertageBerlin = oModel.getData().BE;
    var datelist = [];
    for (var prop in oFeiertageBerlin) {
      datelist.push(oFeiertageBerlin[prop].datum);
    }
    result.setData({datelist: datelist});
  });

  var jDatum = new Date();
  var jLink = "https://feiertage-api.de/api/?jahr=" + jDatum.getFullYear();
  oModel.loadData(jLink);

  return result;
}

var model = loadHolidays();
// attach model to view
// e.g. sap.ui.getCore().setModel(model);

柱塞示例,日期显示在表格中:Plunker Holiday Example