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

发布于 2022-09-12 13:18:54 字数 511 浏览 7 评论 0

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这个变量累加去计算执行次数,但感觉这个封装的不太优雅,有哪位大神指点一下没

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

稀香 2022-09-19 13:18:54
// 封装
    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("传一个参数");
ぃ弥猫深巷。 2022-09-19 13:18:54

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()
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文