我希望始终获得“真实”的结果,但是要以更优雅的方式。这可能吗?
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++;
}
});
我希望结果总是在第一次回调之后,但是之后,callb函数不会继续生成更多的回调
答案 0 :(得分:2)
您可以将整个部分包装在之前调用过的函数中。
此功能会跟踪它是否是第一个呼叫,并阻止更多的回叫呼叫。
function once(fn) {
var run = true;
return function() {
console.log(arguments); // omit later
if (run) {
fn.apply(null, arguments);
run = false;
}
}
}
function callB(cb) {
var i = 1;
while (i <= 5) {
cb(i);
i++;
}
}
callB(once(function (value) {
console.log(value, true);
}));
&#13;
答案 1 :(得分:1)
当你运行一次并且你的关注是性能时,不要把你的回调放在循环中。
function callB(cb) {
var i = 1;
cb(i);
while (i <= 5) {
i++;
}
}
callB( v => console.log('Runs once with value ' + v));
&#13;
答案 2 :(得分:-1)
我根据自己的需要调整了功能,因此:
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);
}));