我正在尝试使用以下逻辑创建脚本: 做第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
});
但是什么也没发生,它根本不起作用。我在做什么错了?
答案 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');
}
})();