javascript回调试图解决什么问题?

时间:2016-08-16 21:01:18

标签: javascript

我正在努力了解javascript回调试图解决的问题。从我到目前为止所读到的,我们有事件,这些事件可以接受函数作为参数(回调函数)

reference here

recylcerAdapter RecylcerAdapter =
        new recylcerAdapter(image.toArray(new  Integer[image.size()]), names.toArray(new String[names.size()]));
LinearLayoutManager manager = new LinearLayoutManager(getActivity());
manager.canScrollVertically();
recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(RecylcerAdapter);

RecylcerAdapter.setListener(new recylcerAdapter.Listener() {
    public void onClick(int position) {
        vibrator.vibrate(50);

        Intent intent = new Intent(getActivity(), EquationsActivity.class);
        intent.putExtra(EquationsActivity.POSITION, position);
        getActivity().startActivity(intent);

    }
});

所以我的猜测是我们试图解决的问题是我们想在事件发生后做更多的事情?

例如:

想象一下,我的系统包含一个输入文本,其中包含一个按邮政编码搜索商店的按钮,以及一个使用我的地理位置搜索商店的按钮。如果我点击按钮搜索输入为“12345”的商店,我还希望“回调”另一个能够清除地理位置的功能;因为我不希望这会干扰我的结果。

这有意义吗?

3 个答案:

答案 0 :(得分:1)

当代码需要异步运行时,最常使用回调。同步意味着"按顺序",所以异步意味着不按顺序。异步事物的本质是它们的顺序无法预测。这是AJAX请求和事件的情况,前端开发的两个主要方面。我们无法知道服务器响应需要多长时间,而且我们无法知道用户何时会点击按钮并调出其他事件,更不用说知道他们做什么的顺序了它。因此我们使用回调基本上说:"当这个异步操作完成时,执行X",其中X是回调函数中的代码。

答案 1 :(得分:0)

  

javascript回调试图解决什么问题?

这是一个合理且可回答的问题。描述有点令人困惑,我不确定这正是您正在寻找的内容,但我会回答最初提出的问题。

Javascript不是多线程语言。在浏览器中,页面将锁定,直到Javascript代码完成执行,并且NodeJS应用程序将无法提供任何其他请求或执行任何其他逻辑,直到代码完成。

回调是解决此问题的方法。它们允许开发人员指定在给定事件上运行的代码,例如AJAX请求完成或(在Node中)返回数据的数据库查询。如果没有回调,页面/应用程序将锁定,直到收到请求,这会使AJAX中的A(非对称)失败。

进一步阅读:

http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

答案 2 :(得分:0)

正如其他人所指出的,这用于异步调用。我将尝试简单地以一种非常简单的方式解释它。 假设您正在调用使用Ajax保存数据。实际保存可能需要一些时间(比如1秒),但控制流程在调用之后立即转移到下一个语句。换句话说,您的代码不会等待方法调用的响应。 (那是因为它是异步的)。 但是,您可能希望向用户显示一条消息,指示记录是否已成功保存,或操作是否已失败。在这种情况下,您需要使用回调方法并检查Ajax调用的返回值。 您无法预测回调方法何时发生,但是当它发生时,回调中的代码会被执行,您可以在此处添加逻辑以向用户显示正确的消息。

相关问题