Javascript 只在第一次回调时运行函数,但要以更优雅的方式运行

Javascript 只在第一次回调时运行函数,但要以更优雅的方式运行,javascript,callback,Javascript,Callback,我希望总是得到“真实”的结果,但要以更优雅的方式。这可能吗 function callB(cb) { var i = 1; while (i <= 5) { cb(i); i++; } } var i = 0; callB(function(data) { console.log(data); if (i === 0) { console.log(true); i++; } }); 函数调用B(cb){ var i=1; 而(i您

我希望总是得到“真实”的结果,但要以更优雅的方式。这可能吗

function callB(cb) {
  var i = 1;
  while (i <= 5) {
    cb(i);
    i++;
  }
}

var i = 0;
callB(function(data) {
  console.log(data);
  if (i === 0) {
    console.log(true);
    i++;
  }
});
函数调用B(cb){
var i=1;

而(i您可以将整个部分封装在之前调用的函数中

此函数跟踪它是否是第一次调用,并防止再次调用回调

功能一次(fn){
var-run=true;
返回函数(){
console.log(参数);//稍后忽略
如果(运行){
fn.apply(空,参数);
运行=错误;
}
}
}
函数调用B(cb){
var i=1;

而(i我根据需要调整了功能,因此:

function once(fn) {

    var run = true;

    var timeout = setTimeout(function () {
        if (run) {
            fn(false);
            run = false;
        }
    }, 5000);

    return function () {
        console.log(arguments); // omit later
        if (run) {
            fn.apply(null, arguments);
            //resolve(true);
            clearTimeout(timeout);
            run = false;
        }
    };

}

function callB(cBa) {
    var i = 1;
    while (i <= 5) {
        //cBa(i);
        i++;
    }
}

callB(once(function (value) {
    console.log(value);
}));
功能一次(fn){
var-run=true;
var timeout=setTimeout(函数(){
如果(运行){
fn(假);
运行=错误;
}
}, 5000);
返回函数(){
console.log(参数);//稍后忽略
如果(运行){
fn.apply(空,参数);
//决心(正确);
clearTimeout(超时);
运行=错误;
}
};
}
函数调用B(cBa){
var i=1;

而(i当您运行一次这个函数时,您关心的是性能,那么不要将回调放在循环中

函数调用B(cb){
var i=1;
cb(i);

while(i console.log('Runs one with value'+v');
您能解释一下您到底想要什么吗?您想在不修改
callB()
函数的情况下执行此操作吗?也就是说,只更改作为回调传递给它的函数?始终“true”是什么意思?需要详细说明吗?这样做可以节省RAM内存吗?因为像我这样做,我让计算机冻结,在大函数中,它不保存RAM。这只是对功能的不同写入。好的。你认为如果回调在10秒内没有到达,我可以设置一个超时吗?试试吧。也许你需要另一个变量。do我在10秒时使用setTimeout,该设置不适用于fn.apply(null,arguments);并且run=false;?它的工作方式是:谢谢大家。您可以在这里查看: