我理解将一个函数传递给另一个函数作为回调并让它执行,但我不理解这样做的最佳实现.我正在寻找一个非常基本的例子,像这样:
var myCallBackExample = {
myFirstFunction : function( param1, param2, callback ) {
// Do something with param1 and param2.
if ( arguments.length == 3 ) {
// Execute callback function.
// What is the "best" way to do this?
}
},
mySecondFunction : function() {
myFirstFunction( false, true, function() {
// When this anonymous function is called, execute it.
});
}
};
Run Code Online (Sandbox Code Playgroud)
在myFirstFunction中,如果我确实返回了新的callback(),那么它可以工作并执行匿名函数,但这对我来说似乎不是正确的方法.
问题:如何创建从DialogFragment到另一个Fragment的回调.就我而言,涉及的活动应该完全不知道DialogFragment.
考虑一下我
public class MyFragment extends Fragment implements OnClickListener
Run Code Online (Sandbox Code Playgroud)
然后在某些时候我能做到
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Run Code Online (Sandbox Code Playgroud)
MyDialogFragment的样子
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果DialogFragment在其生命周期中暂停和恢复,则无法保证听众会出现.片段中唯一的保证是通过setArguments和getArguments通过Bundle传递的.
如果它应该是监听器,有一种方法可以引用该活动:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Run Code Online (Sandbox Code Playgroud)
但我不希望活动监听事件,我需要一个片段.实际上,它可以是任何实现OnClickListener的Java对象.
考虑通过DialogFragment呈现AlertDialog的Fragment的具体示例.它有Yes/No按钮.如何将这些按钮发送回创建它的Fragment?
在最近的Google IO期间,有一个关于实现restful客户端应用程序的演示文稿.不幸的是,这只是一个高级别的讨论,没有实现的源代码.
在此图中,在返回路径上有各种不同的回调到其他方法.
我如何声明这些方法是什么?
我理解回调的想法 - 在某个事件发生后调用的一段代码,但我不知道如何实现它.到目前为止,我实现回调的唯一方法是覆盖各种方法(例如onActivityResult).
我觉得自己对设计模式有了基本的了解,但是我一直在探索如何处理返回路径.
我在TypeScript中有以下类:
class CallbackTest
{
public myCallback;
public doWork(): void
{
//doing some work...
this.myCallback(); //calling callback
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的类:
var test = new CallbackTest();
test.myCallback = () => alert("done");
test.doWork();
Run Code Online (Sandbox Code Playgroud)
代码有效,因此它会按预期显示消息框.
我的问题是:我可以为我的课程领域提供任何类型的课程myCallback吗?现在,公共字段myCallback的类型any如上所示.如何定义回调的方法签名?或者我可以将类型设置为某种回调类型?或者我可以做些什么吗?我必须使用any(隐式/显式)吗?
我试过这样的东西,但它不起作用(编译时错误):
public myCallback: ();
// or:
public myCallback: function;
Run Code Online (Sandbox Code Playgroud)
我在网上找不到任何解释,所以我希望你能帮助我.
从我所做的阅读中,Core Audio在很大程度上依赖于回调(和C++,但这是另一个故事).
我理解设置一个函数的概念(类型),该函数由另一个函数重复调用以完成任务.我只是不明白他们是如何设置以及他们如何工作的.任何例子将不胜感激.
假设我有一个完整的任务队列,我需要提交给执行程序服务.我希望他们一次处理一个.我能想到的最简单的方法是:
但是,我试图完全避免阻塞.如果我有10,000个这样的队列,需要一次处理一个任务,我将耗尽堆栈空间,因为它们中的大多数将保持被阻塞的线程.
我想要的是提交一个任务并提供一个在任务完成时调用的回调.我将使用该回叫通知作为发送下一个任务的标志.(functionaljava和jetlang显然使用了这种非阻塞算法,但我无法理解他们的代码)
如何使用JDK的java.util.concurrent,而不是编写自己的执行器服务?
(向我提供这些任务的队列本身可以阻止,但这是一个需要解决的问题)
我正在我的模型观察器中设置一个after_save回调,只有当模型的已发布属性从false更改为true 时才发送通知.既然方法改变了?只有在保存模型之前才有用,我目前(并且未成功)尝试这样做的方式如下:
def before_save(blog)
@og_published = blog.published?
end
def after_save(blog)
if @og_published == false and blog.published? == true
Notification.send(...)
end
end
Run Code Online (Sandbox Code Playgroud)
有没有人对处理这个问题的最佳方法有任何建议,最好使用模型观察者回调(以免污染我的控制器代码)?
model ruby-on-rails callback observer-pattern ruby-on-rails-4
如果我需要一个接一个地调用这个函数,
$('#art1').animate({'width':'1000px'},1000);
$('#art2').animate({'width':'1000px'},1000);
$('#art3').animate({'width':'1000px'},1000);
Run Code Online (Sandbox Code Playgroud)
我知道在jQuery中我可以做类似的事情:
$('#art1').animate({'width':'1000px'},1000,'linear',function(){
$('#art2').animate({'width':'1000px'},1000,'linear',function(){
$('#art3').animate({'width':'1000px'},1000);
});
});
Run Code Online (Sandbox Code Playgroud)
但是,我们假设我没有使用jQuery而且我想调用:
some_3secs_function(some_value);
some_5secs_function(some_value);
some_8secs_function(some_value);
Run Code Online (Sandbox Code Playgroud)
我应该如何调用这个函数来执行some_3secs_function,然后在该调用结束后,然后执行some_5secs_function并在该调用结束后再调用some_8secs_function?
更新:
这仍然无效:
(function(callback){
$('#art1').animate({'width':'1000px'},1000);
callback();
})((function(callback2){
$('#art2').animate({'width':'1000px'},1000);
callback2();
})(function(){
$('#art3').animate({'width':'1000px'},1000);
}));
Run Code Online (Sandbox Code Playgroud)
三个动画同时开始
我的错误在哪里
在C++中实现回调函数时,我是否还应该使用C风格的函数指针:
void (*callbackFunc)(int);
Run Code Online (Sandbox Code Playgroud)
或者我应该使用std :: function:
std::function< void(int) > callbackFunc;
Run Code Online (Sandbox Code Playgroud) 我想在点击事件中进行三次ajax调用.每个ajax调用都执行不同的操作,并返回最终回调所需的数据.呼叫本身并不依赖于彼此,它们都可以同时进行,但是当所有三个呼叫完成时,我希望最终回调.
$('#button').click(function() {
fun1();
fun2();
fun3();
//now do something else when the requests have done their 'success' callbacks.
});
var fun1= (function() {
$.ajax({/*code*/});
});
var fun2 = (function() {
$.ajax({/*code*/});
});
var fun3 = (function() {
$.ajax({/*code*/});
});
Run Code Online (Sandbox Code Playgroud)