链接延迟函数
Chaining the delay function
我想运行延迟函数作为下划线链的一部分。似乎延迟函数只能使用传递的显式参数 - 而不是包装器对象。此代码不起作用(未定义不是函数异常):
var message = function (text) {
var txt = text;
var show = function () { alert(txt); };
return {
Text: txt,
Show: show
};
};
_.chain(new message("hello")).delay(function(m) { m.Show(); }, 1000);
此代码有效:
var x = _.chain(new message("hello")).value();
_.delay(function (m) { m.Show(); }, 1000, x);
有没有办法在较长的函数表达式中使延迟起作用?
例如,我想推迟视图模型实例的创建,然后将绑定到 UI 的延迟 X 毫秒。
chain()
在下划线中所做的只是通过以下所有函数通过管道将其参数传递给这些函数,并将其作为第一个参数传递给这些函数。
由于delay()
的第一个参数应该是一个函数,因此要实现您想要的功能,您必须执行以下操作:
_.chain(function(m) {
m.Show();
}).delay(1000, new message("hello"));
但我想它没有你想要的结构。
所以你不能直接使用delay()
,但你可以通过tap()
使用它:
_.chain(new message("hello"))
.tap(function(m) {
_.delay(function() {
m.Show();
}, 1000);
})
甚至更简洁地使用tap()
和bind()
:
_.chain(new message("hello"))
.tap(_.delay.bind(null, function(m) {
m.Show();
}, 1000))
如果您不想将集合传递给chain()
并为集合的每个元素执行delay()
,请使用 each()
而不是 tap()
。
以下不是答案,因为它使用 github.com/kriskowal/q 承诺而不是强调.js但这就是我认为您要做的,即通过一些异步的操作管道推送某些内容:
var message = function (text) {
var txt = text;
var show = function () { alert(txt); };
return {
Text: txt,
Show: show
};
};
function delay(time) {
return function(m) {
var next = Q.defer();
setTimeout(function() {
next.resolve(m);
}, 1000);
return next.promise;
}
}
Q.when(new message("hello"))
.then(delay(1000))
.then(function(m) {
m.Show();
});
_.delay 的第一个参数必须是一个函数,但如果消息类(对象),则 u 传递一个实例。F.E.
var foo = function(){
console.log('FOO');
}
_.chain(foo).delay(200);
在您的情况下使用链条是开销。尝试这样的事情:
var showMsg = function(){
var msg = new message("hello");
msg.Show();
};
_(showMsg).delay(200);
相关文章:
- onclick函数需要双击,因为类分配延迟
- 为JS函数添加延迟
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟
- 从另一个函数延迟解析的返回
- JQueryAJAX:防止由于设置间隔函数而导致的延迟
- 如何延迟函数
- 如何在 JS 中调用 2 次或更多次时延迟函数执行
- jQuery/Javascript 延迟函数的执行,直到多个函数完成
- jQuery 延迟使用一系列函数
- 如何按顺序调用延迟函数
- 使用promise或setTimeout确定延迟函数的调用顺序
- 将函数延迟到$可用
- jQuery/Javascript函数延迟运行,直到另一个函数完成(如果需要)
- JQuery animate() 函数延迟且运行缓慢
- Highchart's选择函数延迟更新
- 加载第二函数延迟
- 由于异步函数延迟执行和完成,变量返回预定义值
- 如何应用setTimeout函数延迟bubbleSort算法
- 如何在marrionete.js中构建一个调用链来渲染itemView,并在itemView中使用async函数延迟
- 如何在窗口加载javascript函数.延迟一段时间后加载