Typescript 我如何从爱奥尼亚的承诺中返回价值
我在从返回的http响应中获取值时遇到问题-我试图使用Promise从web服务获取数据,但在控制台中预览时,它表示未定义 在响应主体中,这是返回的内容:Typescript 我如何从爱奥尼亚的承诺中返回价值,typescript,ionic-framework,Typescript,Ionic Framework,我在从返回的http响应中获取值时遇到问题-我试图使用Promise从web服务获取数据,但在控制台中预览时,它表示未定义 在响应主体中,这是返回的内容: {"data":[{ "loginStatus":"Valid", "CustomerName":"Fagbemi Ayodele", "Mobile":null, "Email":"fagbemiayodele48@gmail.com", "CustomerID":"3" }]} a
{"data":[{
"loginStatus":"Valid",
"CustomerName":"Fagbemi Ayodele",
"Mobile":null,
"Email":"fagbemiayodele48@gmail.com",
"CustomerID":"3"
}]}
auth-service.ts
login.ts
控制台在循环结束之前执行,这就是为什么它变为空白。使用async wait获得正确的结果。您的电子邮件变量是if语句的本地变量。如果未定义,则在外部。在if内访问控制台打印,或在if外声明电子邮件-在if之前 检查请声明var电子邮件=[];在if区外 如果要在使用前检查所需变量是否已声明,请尝试添加use strict;作为javascript文件的第一个。添加“使用严格”后;,如果尝试使用不在范围内的变量,脚本将引发异常。 请参阅和文档
希望这能有所帮助。因为你已经完全重新考虑了你的问题,我之前的答案不再有效 从您的响应正文中,很明显响应对象属性数据结果['data']是数组,而不是对象。因此,您无法访问this.data.loginStatus 您应该使用此.data[0].loginStatus从API响应访问登录状态。 另外,在使用数据之前,不要忘记检查数据的长度data.length>0
希望能有帮助 也许您在设置变量之前就使用了它,但是仍然有未定义的可以粘贴1。您可以在使用strict 2之后进行控制台输出。删除敏感内容后的实际代码?仍然未定义。@FAGBEMIAYODLE是否确定globalData中包含有效数据?检查这把小提琴:
login(credentials) {
return new Promise((resolve, reject) => {
this.http.post(apiUrl + '/login.php', JSON.stringify(credentials))
.subscribe(res => {
resolve(res.json());
}, (err) => {
reject(err);
});
});
}
this.authService.login(this.loginData).then((result) => {
this.data = result['data'];
console.log("Result: "+ this.data.loginStatus);
if (this.data.loginStatus == 'Valid') {
localStorage.setItem('loginStatus', this.data.loginStatus);
localStorage.setItem('CustomerName', this.data.CustomerName);
this.navCtrl.setRoot(MyApp);
this.loading.dismiss();
}
else {
this.loading.dismiss();
}
}, (err) => {
this.loading.dismiss();
this.presentToast(err);
});