Làm thế nào tôi giải quyết giai đoạn này?
chỉ như thế:
setTimeout((function(_deepFunction ,_deepData){
var _deepResultFunction = function _deepResultFunction(){
_deepFunction(_deepData);
};
return _deepResultFunction;
})(fromOuterFunction, fromOuterData ) , 1000 );
setTimeout chờ tham chiếu đến một hàm, vì vậy tôi đã tạo nó trong một bao đóng, nó diễn giải dữ liệu của tôi và trả về một hàm với một ví dụ tốt về dữ liệu của tôi!
Có lẽ bạn có thể cải thiện phần này:
_deepFunction(_deepData);
// change to something like :
_deepFunction.apply(contextFromParams , args);
Tôi đã thử nghiệm nó trên chrome, firefox và IE và nó hoạt động tốt, tôi không biết về hiệu suất nhưng tôi cần nó để hoạt động.
một bài kiểm tra mẫu:
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
Có lẽ bạn có thể thay đổi chữ ký để làm cho nó phù hợp hơn:
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)
}
Và cuối cùng để trả lời câu hỏi ban đầu:
myNass_setTimeOut( postinsql, 4000, topicId );
Hy vọng nó có thể giúp!
ps: xin lỗi nhưng tiếng anh không phải tiếng mẹ đẻ của tôi