第一行(等待)只是等待一定數量的毫秒,然後結束。
第二行(重複)的程序的功能,以在(setInterval的)一定的時間間隔運行,然後調用wait並傳遞重複功能將其設置的毫秒數。這些功能只被調用一次。 JavaScript的對setInterval的內部控制是在設定的時間間隔調用() => Promise.all([myfunction()])
什麼需要控制從現在開始。
如果你只是識別你的代碼,事情會變得更加清晰。
var wait =
ms => new Promise(
r => setTimeout(r, ms)
);
var repeat =
(ms, func) => new Promise(
r => (
setInterval(func, ms),
wait(ms).then(r)
)
);
repeat(1000,() => Promise.all([myfunction()]))
.then(...);
爲了停止函數,你必須捕獲間隔的id,並調用clearInterval作爲SimpleJ指出的。 您可能會希望在Promise完成後執行此操作。因此,一個完整的工作示例是:
var intervalID = 0;
var wait =
ms => new Promise(
r => setTimeout(r, ms)
);
var repeat =
(ms, func) => new Promise(
r => (
intervalID = setInterval(func, ms),
wait(ms).then(r)
)
);
var myfunction =
() => new Promise(
r => r(console.log('repeating...'))
);
var stopAfter5Secs =
() => new Promise(
r => r(setTimeout(() => {
clearInterval(intervalID);
console.log('repeat end')
} , 5000))
);
repeat(1000,() => Promise.all([myfunction()])) // 1000 miliseconds = 1 second
.then(stopAfter5Secs()) // starts timer to end repetitions
.then(console.log('repeat start')); // informs that all actions were started correctly and we are waiting for them to finish
Promiss.all調用傳遞給它的任何可交換對象中的所有promisses。在這種情況下,只有一個元素(myfunction)的數組。我創建了一個簡單的函數,只將「重複」寫入控制檯,作爲該函數。但是,如果所有的函數都返回promisses,則可以傳遞任意數量的函數。
你可以看到它在這裏工作:https://jsfiddle.net/9n2knxdg/7/
https://jsfiddle.net/daronwolff/n10n17ag/ –
寫出來的「經典」 ES符號,取代箭頭符號'輸入=> doAthing'用'功能(input){doAthing}',然後看看你是否明白它的作用。 –
這是打算成爲某種異步輪詢的?像「每隔n秒運行一次異步功能」? – SimpleJ