等待函数完成承诺

时间:2018-07-29 15:54:56

标签: javascript function asynchronous

我正在尝试使用以下逻辑创建脚本: 做第1步 等待步骤1完成然后执行步骤2

对于第1步,我从这里获取了这段出色的代码: https://codereview.stackexchange.com/a/13051 每隔一段时间重复一个功能:

var someFunc = function () {window.scrollBy(0, 500);}

function repeatXI(callback, interval, repeats, immediate) {
  var timer, trigger;
trigger = function () {
    callback();
    --repeats || clearInterval(timer);
  };

  interval = interval <= 0 ? 1000 : interval; // default: 1000ms
  repeats  = parseInt(repeats, 10) || 0;      // default: repeat forever
  timer    = setInterval(trigger, interval);

  if( !!immediate ) { // Coerce boolean
    trigger();
  }
}

repeatXI(someFunc, 1000, 5)

第2步具有以下代码:

if($('#smc').css('display') === 'block')
            {
                alert('iparxi')
                $('#smc').trigger('click');
            }
            else
            {
                alert('den iparxi')
                GM_setClipboard('1');
            }

问题在于步骤2发生在步骤1之前。根据我的阅读,为了解决此问题,我必须使用Promises。不幸的是,我已经阅读了十几篇文章,尽管我了解它们的逻辑,但是我无法正确实现其语法。例如,我尝试这样做:

let repeatXI = new Promise(function(resolve, reject) {
  resolve('Success!');
});

repeatXI(someFunc, 1000, 3).then(function(value) {
step 2 code
});

但是什么也没发生,它根本不起作用。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

是的,这可以通过使用promise解决,但是为此需要向下滚动。但这很简单:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

(async function() { // enter asynchronous code
   let count = 3;
   while(count--) {
     await delay(1000);
     window.scrollBy(0, 500);
   }
   if($('#smc').css('display') === 'block') {
      alert('iparxi')
      $('#smc').trigger('click');
   } else {
      alert('den iparxi')
      GM_setClipboard('1');
   }
})();