Javascript:中止该功能

时间:2017-04-19 11:33:49

标签: javascript

有功能,调用时需要几分钟才能完成。 函数获取可用课程列表,然后调用其他服务以获取课程的详细信息。

调用函数时,我需要停止它的前一个实例(如果有的话)。我怎样才能做到这一点?

我已经写过代码片了。这是个好主意吗?如果我打电话给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(),是否会中止所有正在运行的功能和服务电话?

0 个答案:

没有答案