呼び出し元関数を取得し、非同期呼び出しがコールバック関数として渡す必要がなくなった後で再実行する方法が、vanilla Javascript(ES5)にありますか?JS呼び出し元関数を取得し、非同期コールバックとして再実行
私はシステム上にキャッシュ機構を構築していますが、何らかの理由で約束、es6のジェネレータ機能などを使用することはできません。
今、私はそれをこのように(これは非常に単純化されたバージョンである)をコードしています:私は「右のjavascriptの道」それをコーディングしていた場合、私はわからない
var cache = {};
var cacheCallbackQueue = [];
var theCallerFunction = function(someParam){
loadCache("aDataTarget",function(){
theCallerFunction(someParam);
});
// cache will be used here somehow
// if the needed cache haven't been loaded
// the async cacher should re-execute this caller function after the caching is complete
}
var anotherCallerFunction = function(anotherParam){
loadCache("anotherDataTarget",function(){
anotherCallerFunction(anotherParam);
});
}
var loadCache = function(cacheId,callback){
asyncCall(cacheId, function(result){
cache[cacheId] = result;
cacheCallbackQueue.push(callback);
// is there a way to get the caller function automatically
// without the need to pass it as callback function on the parameter
checkCachingStatus();
})
}
// check if caching is completed,
// if the caching is completed,
// it will execute all previously queued callback function
var checkCachingStatus = function(){
var cachingStatus = "complete";
if(!cache["aDataTarget"] || !cache["anotherDataTarget"]){
cachingStatus = "incomplete";
}
if(cachingStatus === "complete"){
for(var key in cacheCallbackQueue){
cacheCallbackQueue[key]();
}
}
};
theCallerFunction("whatever");
anotherCallerFunction(666);
を別の提案
ES2015はかなりモダンで、私はあなたがES5を意味すると仮定します。 – Keith
***なぜ*** "コールバック関数として渡す必要はありません"?それは...あなたがこれをどうやってやっているかです。 –