Javascript 如何确保oData读入组件在初始视图加载之前完成

Javascript 如何确保oData读入组件在初始视图加载之前完成,javascript,sapui5,Javascript,Sapui5,因此,我需要在应用程序的component.js中进行odata调用,并根据响应在控制器的onInit上执行某些代码。然而,当我检查网络调用时,我看到调用没有完全完成,这就是为什么我在console中看到错误,因为它试图访问该模型,但由于未调用成功处理程序,所以尚未创建该模型。有什么方法可以做到这一点吗?下面是一个例子: Component.js: this.promise = $.Deferred() oDataModel.read("DataSet", { success: (oDa

因此,我需要在应用程序的component.js中进行odata调用,并根据响应在控制器的onInit上执行某些代码。然而,当我检查网络调用时,我看到调用没有完全完成,这就是为什么我在console中看到错误,因为它试图访问该模型,但由于未调用成功处理程序,所以尚未创建该模型。有什么方法可以做到这一点吗?

下面是一个例子:

Component.js:

this.promise = $.Deferred()
oDataModel.read("DataSet", {
    success: (oData)=>{
        this.promise.resolve(oData);
    },
    error: (oError)=>{
        this.promise.reject(oError)
    }
});
this.promise.promise();
控制器:

this.getComponent().promise.then((oData)=>{
    // your code...
});
Component.js:

this.promise = $.Deferred()
oDataModel.read("DataSet", {
    success: (oData)=>{
        this.promise.resolve(oData);
    },
    error: (oError)=>{
        this.promise.reject(oError)
    }
});
this.promise.promise();
init:function(){
oDataModel.read(“/SET”{
成功:功能(oData){
//在创建视图之前,请检查您的代码
//创建根视图等
UIComponent.prototype.init.apply(这是参数);
//如果需要,获取根视图和控制器
var oView=this.getRootControl();
var-oController=oView.getController();
//实例化路由器
这个.getRouter().initialize();
}.绑定(此),
错误:函数(oError){
//错误处理
}
});
//不依赖于承诺的代码
}
请注意,根视图是在控制器之前创建的


下面是

承诺的文档,async/await,但是如何确保视图在默认情况下不加载,并且只有在调用成功后,才应该初始化根视图?在组件中创建一个承诺。通过getter使其可访问。在成功回调中解决承诺。在Controller的onInit do
this.getOwnerComponent().getMyPromise()。那么(……)
您能提供我可以参考的任何代码示例或任何示例实现吗?谢谢你的帮助!你到底在哪里挣扎?我的模型设置在清单上,所以我需要使用这个.getOwnerComponent。但是只要UIComponent.prototype.init.apply(这是参数);未调用,我无法使用它。此代码段位于组件内部。只需使用这个.getModel()就可以得到您的模型。