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
相关产品推荐
相关产品推荐

