You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UI5中getResourceBundle返回Promise的版本变更及适配问询

UI5 getResourceBundle() 返回Promise的版本与配置说明

问题描述

按照《UI5 TypeScript入门教程第22步 - 自定义格式化器》操作时,调用this.getOwnerComponent().getModel("i18n").getResourceBundle()返回的是已兑现的Promise而非资源包对象。目前通过await适配的代码如下:

sap.ui.define([], function () {
  'use strict'

  return {
    formatText: async function () {
      var oRB = await this.getOwnerComponent()
          .getModel('i18n')
          .getResourceBundle();
      return oRB.getText('hi');
    }
  }
});

版本变更点

该行为从UI5 1.72版本开始正式变更:

  • 1.72及以后版本中,getResourceBundle()默认始终返回Promise——无论资源包是否已加载完成,以此统一异步API的行为逻辑。
  • 1.72之前的版本中,若资源包已加载完成,调用该方法会直接返回资源包对象;未加载完成时才返回Promise。

配置切换方式

如果需要恢复旧版同步返回的行为,可以在i18n模型的配置中设置async: false:

方式1:在manifest.json中配置

{
  "sap.ui5": {
    "models": {
      "i18n": {
        "type": "sap.ui.model.resource.ResourceModel",
        "settings": {
          "bundleName": "your.app.namespace.i18n.i18n",
          "async": false
        }
      }
    }
  }
}

方式2:代码中初始化模型时配置

new sap.ui.model.resource.ResourceModel({
  bundleName: "your.app.namespace.i18n.i18n",
  async: false
});

设置后,getResourceBundle()会直接返回资源包对象,无需使用await。

注意事项

  • UI5官方更推荐保留默认的async: true(即异步返回Promise),配合await或Promise链式调用处理,因为同步加载可能阻塞UI渲染,影响用户体验。
  • 当前使用await适配的写法符合UI5新版规范,绑定场景下UI5会自动处理异步返回值,无需额外处理。

内容的提问来源于stack exchange,提问作者Pieter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:07:52