有功能,调用时需要几分钟才能完成。 函数获取可用课程列表,然后调用其他服务以获取课程的详细信息。
调用函数时,我需要停止它的前一个实例(如果有的话)。我怎样才能做到这一点?
我已经写过代码片了。这是个好主意吗?如果我打电话给cancel.abort
,它只会停止主要功能还是所有它的嵌套服务电话?
const customXmlHttpRequest = (url, opts={}, cancel={}, timeoutMS = 30000) => {
var xhr = new XMLHttpRequest();
xhr.open(opts.method || 'get', url);
xhr.timeout = timeoutMS; // time in milliseconds
for (var k in opts.headers || {}){
xhr.setRequestHeader(k, opts.headers[k]);
}
return new Promise((resolve, reject)=>{
xhr.onload = e => resolve(e.target);
cancel.abort = () => {
xhr.abort();
reject(new Error("Cancelled"))
};
xhr.onerror = reject;
xhr.ontimeout = () => {
reject(new Error("Timeout"))
}
xhr.send(opts.body);
});
}
const getCourses = (cancel) => {
return new Promise((resolve, reject)=>{
cancel.abort = ()=>{
reject(new Error('Cancelled'))
}
customXmlHttpRequest('/courselist', {}, cancel)
.then((res)=>{
let response = res._reponse.json();
response.forEach((id)=>{
customXmlHttpRequest('/coursedetails'+id, {}, cancel)
.then((res)=>{
let response = res._reponse.json();
//// do the rest
})
.catch((e)=>{
reject(e);
})
.done();
})
})
.catch((e)=>{
reject(e);
})
.done();
})
}
///////////
let cancel = {};
getCourses(cancel);
cancel.abort()

在致电getCourses(cancel)
后,如果我拨打cancel.abort()
,是否会中止所有正在运行的功能和服务电话?