如何在后台用Javascript编写回调?

问题描述 投票:0回答:1

函数如何知道某事是回调;某些先前的I / O完成后需要执行的操作。它怎么知道它不应该立即执行?是否以(标准化)方式在函数中定义?

据我所知,在参数中经常使用'callback'关键字只是一种惯例,但不会自动让函数将参数解释为某些I / O完成后应该开始的参数。

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

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. 即使函数中没有async关键字,函数也可以异步吗?如果是,浏览器如何知道它是异步函数?

javascript function callback
1个回答
0
投票
  1. 我想你想问的是request函数。大多数异步函数调用其他异步函数来执行某些工作,然后调用回调。您可以将其视为函数和回调链。这就是request功能的作用。当然,至少最后一个函数需要真正地异步,并且通常是由节点内置模块(fshttp,...)之一导出的函数。也可以通过本机模块或在较新的节点版本中使用worker_threads模块将其导出。

  2. async关键字对于异步功能不是必需的。将功能标记为async可使该功能使用await语法,并使该功能隐式返回Promise。

为了更好地理解异步代码的工作原理,您应该看一下node event loop的工作原理

请注意,由于您使用了require,所以我假设使用Node.js环境,但是我所说的大部分内容也适用于浏览器:有一串异步函数,最后一个将调用其中一个内置函数。 -in功能(例如XMLHttpRequest)。浏览器环境也使用事件循环,async/await的工作方式相同

© www.soinside.com 2019 - 2024. All rights reserved.