我一直在从这样的函数中返回请求:
makeConnection(data: any) {
console.log('makeConnection');
return this.api.get(data.url, data.dataToSend);
}
所以我可以这样订阅:makeConnection.subscribe();
现在,我需要在进行API调用之前检查是否设置了名为urls
的变量,所以我想到了制作这样的承诺函数
checkIfUrlsPresent():Promise<boolean> {
return new Promise((resolve, reject) => {
if(this.urls) {
resolve(true);
return;
}
this.api.get('/service', null).subscribe((response) => {
console.log(response);
this.urls = response.value.urls;
resolve(true);
});
});
}
现在我的服务功能如下:
requestService(data) {
this.checkIfUrlsPresent().then(() => {
console.log('requestService');
let dataToSend = this.api.createFormData(data);
return this.api.post('/service/request/', dataToSend);
})
}
但是现在我将无法订阅requestService(data).subscribe()
之类的函数
因此,我的问题是如何在添加此Promise的同时保持当前流程正常运行,或者在保持该流程正常运行的同时进行调用之前,是否有任何方法可以检查我的变量是否已设置。
注意:问题是我正在从一个文件进行所有api调用,并且调用这些API的函数过多,因此我需要这种方式,这样就无需在所有文件中进行更改我的页面以检查网址是否存在。
答案 0 :(得分:1)
快到了。还需要在函数内部返回promise
requestService(data) {
return this.checkIfUrlsPresent().then(() => { // return the promise
console.log('requestService');
let dataToSend = this.api.createFormData(data);
return this.api.post('/service/request/', dataToSend);
})
}
答案 1 :(得分:1)
已requestService
返回链接的承诺,并在其上调用.then
:
requestService(data) {
return this.checkIfUrlsPresent().then(() => {
console.log('requestService');
let dataToSend = this.api.createFormData(data);
return this.api.post('/service/request/', dataToSend);
})
}
// ..
instance.requestService(someData)
.then(service => service.subscribe())