[英]Writing a Javascript function that resolves a promise when watch source becomes truthy
我正在嘗試編寫一個 Javascript function 來觀察 javascript 表達式並等待它變為truthy
,然后它將解析 promise。問題是我when
function 永遠不會解析 promise。
最后我想像這樣使用這個 function :
let myNumber = 0
setInterval(() => {
myNumber = myNumber + 1
}, 1000)
when(myNumber === 4).then(() => {
console.log('My number is 4!!')
})
這是我的when()
function:
window['when'] = (watchSource: boolean): Promise<any> => {
return new Promise(resolve => {
let interval
interval = setInterval(() => {
console.log(watchSource) // <--- always false
if (watchSource === true) {
clearInterval(interval)
resolve()
}
}, 100)
})
}
when(myNumber === 4).then(() => {
console.log('My number is 4!!')
})
這個問題是當調用when()
時myNumber === 4
被評估為false
,因此false
然后被分配給watchSource
。 由於永遠不會再次調用when()
,因此永遠不會提供watchSource
的新值並且它保持為false
。
解決此問題的(許多)方法之一是將 watchSource 設置為 function。這使您可以在每次要檢查時重新執行條件。
window['when'] = (watchSource: () => boolean): Promise<any> => {
return new Promise(resolve => {
let interval
interval = setInterval(() => {
console.log(watchSource()) // <--- always false
if (watchSource() === true) {
clearInterval(interval)
resolve()
}
}, 100)
})
}
然后:
when(() => myNumber === 4).then(() => {
console.log('My number is 4!!')
})
when()
在整個應用程序中只被調用一次,除非您在其他地方再次調用它。 因此,更適合您的情況的邏輯是:
let myNumber = 0
const interval = setInterval(() => {
myNumber = myNumber + 1
if (myNumber === 4) {
clearInterval(interval);
}
}, 1000)
如果您想實現某種“監視”處理程序,我建議您改用Proxy
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.