对于我的Ionic 2项目,我有两个功能一个接一个地执行。每个函数都包含一个API调用。我想等到第一个函数完成后执行所有操作才能进入第二个函数。
我遇到的问题是,由于第一个函数需要一些时间才能完成,所以第二个函数在第一个函数完成执行之前执行。
我正在学习如何使用Promise,因为我被告知它可以解决这个问题。 我已经简化了代码,因此更容易理解:
const first = () => {
self.pspService.post('/api/Conversation/GetPersonalCalendarData',
{
}, result => {
result.Data.forEach(lAppointment => {
});
});
return new Promise((resolve, reject) => {
resolve();
});
};
const second = () => {
self.pspService.post('/api/Conversation/AddPersonalAppointment', {
}, result => {
});
return new Promise((resolve, reject) => {
resolve();
});
};
first().then(() => {
return second();
});
答案 0 :(得分:1)
您可以将帖子包裹在total
:
List[Test.type]
或者直接返回POST生成的承诺
List[Serializable]
答案 1 :(得分:0)
使用新的HttpClient和switchMap获取唯一的Observable
firstAndSecond(){
return self.pspService.post('/api/Conversation/GetPersonalCalendarData')
.switchMap((data:any)=>{
//there you have "data", you can use to change the post
return self.pspService.post('/api/Conversation/AddPersonalAppointment')
});
}
//In your component
myService.firstAndSecond().subscribe((data2)=>{
//data2 it's only the data from self.pspService.post
}
答案 2 :(得分:0)
您可以使用 async / 等待来完全处理此类场景。异步函数以 async 关键字为前缀; await 暂停执行,直到完成异步函数返回promise,并从返回的Promise中解除值。
async func(){
const first = () => {
self.pspService.post('/api/Conversation/GetPersonalCalendarData',
{
}, result => {
result.Data.forEach(lAppointment => {
});
});
return new Promise((resolve, reject) => {
resolve();
});
};
const second = () => {
self.pspService.post('/api/Conversation/AddPersonalAppointment', {
}, result => {
});
return new Promise((resolve, reject) => {
resolve();
});
};
let firstValue = await first();
console.log("First Value", firstValue);
let secondValue = await second();
console.log("Second Value", secondValue);
}