Wie habe ich diese Phase gelöst?
genau so :
setTimeout((function(_deepFunction ,_deepData){
var _deepResultFunction = function _deepResultFunction(){
_deepFunction(_deepData);
};
return _deepResultFunction;
})(fromOuterFunction, fromOuterData ) , 1000 );
setTimeout wartet auf einen Verweis auf eine Funktion, also habe ich ihn in einem Closure erstellt, der meine Daten interpretiert und eine Funktion mit einer guten Instanz meiner Daten zurückgibt!
Vielleicht können Sie diesen Teil verbessern:
_deepFunction(_deepData);
// change to something like :
_deepFunction.apply(contextFromParams , args);
Ich habe es auf Chrome, Firefox und IE getestet und es funktioniert gut. Ich weiß nichts über die Leistung, aber ich brauchte es, um zu funktionieren.
ein Beispieltest:
myDelay_function = function(fn , params , ctxt , _time){
setTimeout((function(_deepFunction ,_deepData, _deepCtxt){
var _deepResultFunction = function _deepResultFunction(){
//_deepFunction(_deepData);
_deepFunction.call( _deepCtxt , _deepData);
};
return _deepResultFunction;
})(fn , params , ctxt)
, _time)
};
// the function to be used :
myFunc = function(param){ console.log(param + this.name) }
// note that we call this.name
// a context object :
myObjet = {
id : "myId" ,
name : "myName"
}
// setting a parmeter
myParamter = "I am the outer parameter : ";
//and now let's make the call :
myDelay_function(myFunc , myParamter , myObjet , 1000)
// this will produce this result on the console line :
// I am the outer parameter : myName
Vielleicht können Sie die Signatur ändern, um sie komfortabler zu gestalten:
myNass_setTimeOut = function (fn , _time , params , ctxt ){
return setTimeout((function(_deepFunction ,_deepData, _deepCtxt){
var _deepResultFunction = function _deepResultFunction(){
//_deepFunction(_deepData);
_deepFunction.apply( _deepCtxt , _deepData);
};
return _deepResultFunction;
})(fn , params , ctxt)
, _time)
};
// and try again :
for(var i=0; i<10; i++){
myNass_setTimeOut(console.log ,1000 , [i] , console)
}
Und schließlich zur Beantwortung der ursprünglichen Frage:
myNass_setTimeOut( postinsql, 4000, topicId );
Hoffe es kann helfen!
ps: sorry aber englisch es ist nicht meine muttersprache!