我有一個回呼函式,它被一些我無法控制的其他物件呼叫。我需要等到這個回呼函式被呼叫,我不在乎是誰。
var successFunc = function() {
// do stuff
}
myObject.onSuccess = successFunc;
// hang on until successFunc is called...
我發現了這個 hacky 解決方法,但它很糟糕:
var completed = false;
var successFunc = () => {
// do stuff
completed = true;
}
myObject.onSuccess = successFunc;
while (!completed) {
sleep(200); // sleeps for 200 ms
}
uj5u.com熱心網友回復:
創建一個promise,resolve以某種方式將它的函式作為回呼傳遞給未知的呼叫者,監聽promise的決議:
let callback;
const promise = new Promise(r => callback = r);
promise.then(() => console.log('unknown caller called'));
setTimeout(function unknownCaller() {
console.log('randomly calling back');
callback();
}, Math.random() * 5000);
uj5u.com熱心網友回復:
你可以玩等待/異步:
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/await
var myObject = {
promiseCreation() {
return new Promise(resolve => {
setTimeout(() => {
resolve(true);
}, 2000);
});
}
}
var successFunc = () => {
completed = true;
console.log('win');
};
myObject.onSuccess = successFunc;
var asyncfunc = async () => {
var test = await myObject.promiseCreation();
//do thing after promise resolved
myObject.onSuccess();
}
asyncfunc();
uj5u.com熱心網友回復:
嘗試設定超時功能
setTimeout(() => {
}, timeout);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388609.html
標籤:javascript 异步 承诺
上一篇:從不安全和固定的屬性回傳跨度
