Javascript中,如何将函数嵌套函数的函数封装写的更优雅?例如:

function checkOrderStatus(n){
    var checkIndex=0;
    function loop(n){
        setTimeout(function (){
        checkIndex++;
        $http.get('/get/status', {}).then(function (res) {
            if (res.success) {
                 if(checkIndex<n){
                     loop(n)
         
                    } 
                } 
         }) 
         },500);
       }
    loop(n);
}

这个函数的功能是每隔500ms去请求一下后台接口,这里我要用checkIndex这个变量累加去计算执行次数,但感觉这个封装的不太优雅,有哪位大神指点一下没

阅读 1.7k
2 个回答
// 封装
    const useRet = (fn, n, time) => {
      return function() {
        setTimeout(async () => {
          const success = await fn(...arguments);
          if (success && n > 1) useRet(fn, n - 1, time)(...arguments);
        }, time);
      };
    };

    const test = () => {
      return new Promise(resolve => {
        resolve({ success: true });
      });
    };

    const fn = async a => {
      console.log(a); //'传一个参数'
      return await test().then(({ success }) => success);
    };
    // 使用
    const ret = useRet(fn, 5, 1000);
    // 执行
    ret("传一个参数");

setTimeout是作为轮询的话可以如下

function checkOrderStatus(n){
    var checkIndex=0;
    async function loop(){
        checkIndex++;
        const res = await $http.get('/get/status', {});
        if(res.success &&  checkIndex < n) setTimeout(()=> loop(),500)
    }
    loop()
}

否则

function checkOrderStatus(n){
    var checkIndex=0;
    async function loop(){
        checkIndex++;
        const res = await $http.get('/get/status', {});
        if(res.success &&  checkIndex < n) loop()
    }
    loop()
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题