只在第一次回调时运行函数,但更优雅的方式
Run a function only at first callback, but more elegantly way
我希望总是得到"true"的结果,但要用一种更优雅的方式。这可能吗?
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函数不会继续生成更多的回调
您可以将整个部分封装在以前调用的函数中。
如果是第一次调用,此函数会跟踪,并阻止回调的更多调用。
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);
}));
当您运行此操作一次并且您关心的是性能时,请不要将回调放入循环中。
function callB(cb) {
var i = 1;
cb(i);
while (i <= 5) {
i++;
}
}
callB( v => console.log('Runs once with value ' + v));
我根据需要调整了函数,因此:
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);
}));
相关文章:
- 在phonegap中为android调用onload函数的最佳方式
- 以不同的方式调用javascript函数
- 我想以异步方式执行常规函数
- 有没有一种优雅的方式来告诉esint,以确保我们're没有使用任何ES6语法/函数
- 我想要相同的函数以两种方式反应
- 如果变量不是't已传递给函数.这是正确的方式吗
- 以编程方式调用javascript函数
- 为什么模块化幂函数在 Python 和 Javascript 中对于大数字的工作方式不同
- Javascript - 以编程方式执行所有函数输入的方法
- 以 func(a)(b)(c) 的方式调用的 Javascript 函数
- 如何获取以编程方式定义nodejs函数的位置
- 在Javascript构造函数中定义属性的正确方式
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- 另一种方式是Javascript中的函数堆叠
- 如何制作一个JavaScript函数,处理多组输入,以同样的方式进行数学处理
- 以两种不同的方式使用函数
- javascript存储函数的OOP方式
- 函数未以编程方式启动.click()
- 如何用两种不同的方式调用同一个函数
- 在创建 toLowerCase 函数时,一种方式比另一种方式更好