硬盘|web前端 - JavaScript 中一流函数的日常用例( 二 )


;
var synchronousRequestInterceptors = true;
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
return;

synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
requestInterceptorChain.unshift(interceptor.fulfilled interceptor.rejected);
);
// ------------------------------- execute synchronous interceptors ---------------------//
var newConfig = config;
while (requestInterceptorChain.length) {
var onFulfilled = requestInterceptorChain.shift();
var onRejected = requestInterceptorChain.shift();
try {
newConfig = onFulfilled(newConfig);
catch (error) {
onRejected(error);
break;


在第 23 行 , 我们在 usemethod 中传递的已完成和被拒绝的函数被添加到 requestInterceptorChain 。 我们将函数存储在数组中 。
然后 Axios 将运行它们中的每一个 。 在 while 循环中 , 您可以看到函数被分配给要调用的变量 。
让我们好奇——第 2 部分
发送 HTTP 请求不限于前端开发 。 在开发后端部分时 , 我们可能需要向外部服务器发送请求 。 您能否向我们解释一下如何以您的首选语言处理 HTTP 请求配置?欢迎在留言区分享您的想法 。
在 Node.js 中处理 HTTP 请求
使用 Node.js , 我们可以使用 JavaScript 开发后端部分 。 后端开发是关于处理 HTTP 请求 , 即:接收它们 , 解析它们 , 找到正确的答案 , 并响应客户端 。 Node.js 最常用的框架之一是 Express.js 。
该框架使用中间件来完成上述任务 。 以下是 Express 官方页面中中间件的定义:
中间件函数是可以访问请求对象 (req)、响应对象 (res) 和应用程序请求-响应循环中的下一个中间件函数的函数 。
您可以在下面看到中间件的示例 。
var express = require('express');
var app = express();
app.use('/users' function (req res next) {
// assume only authenticated users can access to /users route
if(!req.user) {
// non authenticated users
res.json({status : \"failed\" message: \"Please login!\");
return;

// if users is authenticated go to the next middleware
next();
);
中间件函数在 use 方法中传递 。 反过来 , 它接受另一个函数 next 作为参数 。 最后调用 next 函数 , 将控制权传递给堆栈中的以下中间件 。
Express 因其简单性而广受欢迎并被广泛使用 。 “一个 Express 应用程序本质上是一系列中间件函数调用 。 ” 尽管看起来微不足道 , 但 Express 的中间件可以帮助我们完成 Web 服务器的所有任务:记录请求、压缩响应、设置 cookie、防止 XSS 攻击……仅举几例 。
让我们再次好奇!
HTTP 请求在其他后端框架中是如何处理的?您能将它与 Express 中间件进行比较吗?每种方法的优点/缺点是什么?你看 , 有很多问题要研究!
最后但并非最不重要的——JavaScript 中的回调地狱
如您所知 , JavaScript 是单线程的 。 但它提供了一种有效的机制来处理长时间运行的任务 。 我们可以立即开始下一个任务 , 而不是等待任务完成 , 并定义前一个任务完成后我们需要做什么 。 这就是回调函数的来源——定义在长时间运行的任务后应该运行什么 。
import { readFilefrom 'fs';
readFile('/etc/passwd' (err data) => {
if (err) throw err;
console.log(data);
);
回调函数为我们提供了一个强大的工具来处理 I/O 绑定的应用程序 。 然而 , 任何好事如果被滥用都会变坏 。 您可以查看下面的示例 。
fs.readdir(source function (err files) {