首页 > 其他分享 >异步函数

异步函数

时间:2024-04-15 10:01:18浏览次数:19  
标签:异步 fs console log err txt data 函数

0.为什么使用异步

因为js本身是单线程,如果所有的任务都是同步的,那么一些非常耗时的任务就会严重影响到用户体验

1. 回调函数

const fs = require('fs');

function read(fileName) {
  fs.readFile(fileName, 'utf-8', (err, data) => {
    if (err) {
      console.log('err', err);
      throw new Error('文件读取出错');
    } else {
      console.log('data', data);
    }
  });
}
try {
// 无test1.txt 文件  报错 但是无法捕获
  read('./test1.txt');
// read(__dirname + '/test.txt)
} catch (error) {
  console.log('err', error);
}

缺点:

  • 无法捕获异常,无法return返回读取结果
  • 会造成回调地狱
  • 效率低
  • 如果使用 runcode运行代码则需要使用 __dirname 拼接上文件名

解决

  • 通过发布订阅
const evnEmiter = require('events');
const dataObj = {};
const eve = new evnEmiter();
eve.on('ready', (key, value) => {
  dataObj[key] = value;
  if (Object.keys(dataObj).length === 2) {
    console.log('数据获取成功', dataObj);
  }
});
fs.readFile(__dirname + '/test.txt', 'utf-8', (err, data) => {
  if (err) {
    console.log('err', err);
    throw new Error('文件读取出错');
  } else {
    eve.emit('ready', 'data1', data);
  }
});
fs.readFile(__dirname + '/trst1.txt', 'utf-8', (err, data) => {
  if (err) {
    console.log('err', err);
    throw new Error('文件读取出错');
  } else {
    eve.emit('ready', 'data2', data);
  }
  • 哨兵函数
// 哨兵函数
const dataObj1 = {};
function done(key, value) {
  dataObj1[key] = value;
  if (Object.keys(dataObj1).length === 2) {
    console.log('数据获取成功1', dataObj1);
  }
}

fs.readFile(__dirname + '/test.txt', 'utf-8', (err, data) => {
  if (err) {
    console.log('err', err);
    throw new Error('文件读取出错');
  } else {
    done('data1', data);
  }
});
fs.readFile(__dirname + '/trst1.txt', 'utf-8', (err, data) => {
  if (err) {
    console.log('err', err);
    throw new Error('文件读取出错');
  } else {
    done('data2', data);
  }
});

标签:异步,fs,console,log,err,txt,data,函数
From: https://www.cnblogs.com/coderzdz/p/18135222

相关文章

  • httprunner 4.x学习 - 06辅助函数(debugtalk)的使用
    前言支持go语言和python语言写辅助函数debugtalk辅助函数在根目录编辑debugtalk.py文件写辅助函数实现自动化生成动态参数。 如下两个int相加和获取登录用用户名函数defsum_two_int(a:int,b:int)->int:returna+b defget_longin_name():retur......
  • 一行return 写一个递归函数! 20240414
    defmake_anonymous_factorial():returnlambdan:1ifn==0elsereduce(lambdax,y:x*y,range(1,n+1))这个函数make_anonymous_factorial的目的是创建并返回一个匿名函数(也称为lambda函数),该匿名函数能够计算一个给定非负整数n的阶乘。下面是对这个函数的详细......
  • 函数及指针
    c语言递归函数就是一个函数调用了函数本身要有一个明显结束的条件要有一个结束条件的趋势常用系统函数字符串函数标准库头文件<string.h>strlen(str)返回一个数组的长度(有元素的长度字符数组中的结束标识符不算)接收类型是size_tstrcpy(str,str1)将str1的字符串......
  • JMeter——异步请求性能测试
    前段时间任务要求要对一种异步请求做性能测试,异步请求步骤如下:step1:发一个数据计算的请求,response里面返回一个jobIdstep2:带上这个jobId,就可以实时查看这个请求返回的jobStatus,如果jobStatus==0,则成功返回计算结果;如果jobStatus==2,则代表jobinprogress;如果jobStatus==......
  • Redefine library-自定义函数库
    1.jjVolcano_Redefinelibrary(scRNAtoolVis)#jjVolcano只有9个颜色,Redefine到我的24个颜色,并与我umap中的分群颜色对应jjVolcano_Redefine<-function(diffData=NULL,myMarkers=NULL,order.by=c("avg_log2FC"),log2FC.cutoff=0.......
  • TVM Pass优化 -- 移除无用函数(Remove Unused Function)
    定义移除无用函数,RemoveUnusedFunction,顾名思义,就是删除Module中定义但未用到的函数当然,它也是一个模块级的优化,举例子:defget_mod():mod=tvm.IRModule({})fn1=relay.Function([],relay.const(1))fn2=relay.Function([],relay.const(2))fn3=r......
  • js函数防抖
    functiondedounce(fn,duration){lettimeId;//此处的this指向windowsreturnfunction(){//此处的this指向调用函数的对象constthat=this;if(timeId){clearTimeout(timeId);}//这个地方的......
  • MySQL 函数
    汇总函数rolluprollup是SQL关键字,在MySQL中得用withrollup。它是groupby子句的扩展,用于统计后增加一行汇总数据。举例,现有库存表,我们按仓库名称分组,统计每个仓库的产品总量,最后来一个汇总。mysql>SELECT*FROMinventory;+----+---------------+---------+----------......
  • [译] .NET 8 中的硬件内在函数(支持 Wasm 和 AVX-512)
    原文链接:https://devblogs.microsoft.com/dotnet/dotnet-8-hardware-intrinsics/HardwareIntrinsicsin.NET8TannerGooding[MSFT]December11th,2023译文:.NET8中的硬件内在函数坦纳·古丁[MSFT]2023年12月11日.NET在通过JIT编译器本质上理解的API提供对附加硬件功......
  • 某函数传参
    在N-API中直接从一个函数向另一个函数传递参数稍微有点复杂,因为你需要正确地处理napi_value数组和环境(napi_env)。如果你想在一个N-API函数(CallAddFunction)中构造参数并直接调用另一个N-API函数(GetAddCheckArg),并且管理这些参数的传递,你将需要手动构建一个新的na......