我必须从服务器获取一些数据。服务器的响应非常缓慢。我想将响应存储在一个数组中,以便它可以显示在template中。目的是将响应存储到数组中直到服务器返回响应为止。
我已经尝试过setTimeout(),但是失败了
ticketdetails()
{
this.funName = 'online_service';
var url = { url:'bookingdetails?username=....&password=....&bookingCode=' + this.id};
console.log(url);
this.myservice.online_service(this.funName,url).subscribe(response => {
if (response.code === '1')
{
this.bookDetails = response;
console.log('Book details inside function', this.bookDetails);
}
})
console.log('Book details outside function' , this.bookDetails)
}
在控制台中, 内部书详细信息显示来自服务器的响应结果 但, 功能外的书籍详细信息显示为null。
答案 0 :(得分:0)
由于JavaScript / TypeScript具有异步性质,因此您无法处理- (AWSTask<AWSCognitoIdentityUserSession *> *)getSession:(NSString *)username
password:(NSString *)password
validationData:(nullable NSArray<AWSCognitoIdentityUserAttributeType *> *)validationData;
之外的返回可观察对象。您必须访问该订阅块中返回的可观察值:
self.user.getSession(username, password:password).continueWithBlock(block: { (result) -> Any? in
if let idToken = result.result?.idToken{
//YOU HAVE THE TOKEN
if self.user?.isSignedIn ?? false{
print("user finally signed in")
}
else{
print("something weird happened")
}
}
})
在模板上,如果您不希望在控制台上打印任何错误(或更糟糕的是,在模板视图本身上),则可以通过在{{1 }},以防止在等待呈现数据(当时尚未定义)时将其从null或未定义的值中删除:
subscribe()
或者,您可以使用* ngIf,它会阻止在定义this.myservice.online_service(this.funName,url).subscribe(response => {
if (response.code === '1') {
this.bookDetails = response;
console.log(response) //prints the array or object
}
});
console.log(this.bookDetails) //this will probably print undefined
之前呈现该div。
bookingDetails
答案 1 :(得分:0)
var mymap = L.map('YOUR_MAP_ID').on('load', onMapLoad).setView([51.505, -0.09], 13);
function onMapLoad(){
console.log("map loaded");
}
答案 2 :(得分:0)
我认为您应该在函数调用的回调中执行所有操作/赋值。 由于调用将是异步的,因此,直到您没有收到服务器的响应,您的其他代码才会被执行。
API调用后的代码将被执行,因此我认为API调用的设计应将其响应包装在回调中,然后再使用。 在API调用之后编写的代码将在该行之后立即执行,因为Java脚本具有明显的本质,因此它不会等待响应到达。
示例:其他服务
customHttpDefaultOptions= {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
postRestCall(requestBody, data) {
this.httpClient.post(apiURL, requestBody, this.customHttpDefaultOptions).pipe(retry(1))
.subscribe(response => {
data(response);
}, error => data(this.handleError(error)));
}
因此,在这里您还应该做一些事情,一旦响应到达,它将被包装在回调中,您以后可以在回调中使用它。
示例:
this.restService.postRestCall(requestBody, data => {
this.his.bookDetails = data;
});
因此,如果您提供了某种形式的休息服务,那么您还可以重用API调用机制,而不用编写api调用的样板代码。
这根本不是慢的问题。