首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >回调是如何在Javascript中在幕后进行编码的?

回调是如何在Javascript中在幕后进行编码的?
EN

Stack Overflow用户
提问于 2019-10-19 10:20:47
回答 1查看 225关注 0票数 0

函数是如何知道某事是回调的;需要在某个先前的I/O完成之后执行的东西。它怎么知道它不应该马上执行?它是以(标准化)方式用函数定义的吗?

据我所知,在参数中经常使用的‘回调’关键字只是常见的练习,但函数不会自动将参数解释为应该在确定的I/O完成后启动的东西。

以下面的例子为例,我有两个问题(取自https://medium.com/codebuddies/getting-to-know-asynchronous-javascript-callbacks-promises-and-async-await-17e0673281ee):

代码语言:javascript
代码运行次数:0
运行
复制
const request = require(‘request’);
function handleResponse(error, response, body){
    if(error){
        // Handle error.
    }
    else {
        // Successful, do something with the result.
    }
}
request('https://www.somepage.com', handleResponse);
  1. 'require‘函数的结构是什么样子的,以便它知道参数2(在本例中是handleResponse)应该在请求完成后执行?我想这可以归结到我上面问的同一个问题。
  2. 即使函数中没有异步关键字,函数也可以是异步的吗?如果是,浏览器如何知道它是一个异步函数?
EN

回答 1

Stack Overflow用户

发布于 2019-10-19 10:50:50

  1. 我想您是想问关于request函数的问题。大多数异步函数调用其他异步函数来完成某些工作,然后调用回调。您可以将其看作是一系列函数和回调。这就是request函数所做的。当然,至少最后一个函数需要真正的异步,并且通常是一个由节点内置模块(fshttp、.)导出的函数。它也可以由本机模块导出,或者在最近的节点版本中使用worker_threads模块。
  2. 函数不需要async关键字来实现异步。将函数标记为async允许函数使用await语法,并使函数隐式返回承诺。

为了更好地理解异步代码是如何工作的,您应该看看节点事件循环是如何工作的。

请注意,我假设了一个Node.js环境,因为您使用了require,但我所说的大部分内容也适用于浏览器:存在一个异步函数链,最后一个函数将调用一个内置函数(例如XMLHttpRequest)。浏览器环境也使用事件循环,async/await以同样的方式工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58462670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档