解决异步的方案

解决异步的方案

异步需要注意的问题

异步没法捕获错误,异步代码不能try catch捕获异步编程中可能出现回调地狱多个异步的操作 在同一个时间内容 同步异步的结果高阶函数函数作为函数的参数函数执行结果返回函数after函数(在xxx之后执行,可以限制达到多少次后执行此回调)代码语言:javascript复制 function after(times,cb){

return function(){

if(--times==0){

cb()

}

}

}

let fn = after(3,function(){

console.log('达到三次了')

})

fn()

fn()

fn()函数柯里化 函数柯里化就是可以把一个函数的执行需要传递的参数分多次执行

代码语言:javascript复制 // 通用的柯里化

const add = (a, b, c, d, e) => {

return a + b + c + d + e;

};

const curring = (fn,arr = [])=>{

let len = fn.length

return (...args)=>{

arr = arr.concat(args); // [1] [1,2,3] < 5

if(arr.length < len){

return curring(fn,arr)

}

return fn(...arr)

}

}

let r = curring(add)(1)(2)(3)(4); // [1,2,3,4,5]简单使用判断数据类型

代码语言:javascript复制 const checkType = (type, content) => {

return Object.prototype.toString.call(content) === `[object ${type}]`;

};

let types = ["Number", "String", "Boolean"];

let utils = {};

types.forEach(type => {

utils["is" + type] = curring(checkType)(type); // 先传入一个参数

});

console.log(utils.isString('hello'));node文件操作 需要name和age都获取到然后输出。

代码语言:javascript复制 let fs = require('fs')

let schoolInfo = {}

function after(times,cb){

return function(){

if(--times==0){

cb()

}

}

}

let fn = after(2,function(){

consolr.log(schoolInfo)

})

fs.readFile('./name.txt','utf8',function(err,data){

schoolInfo['name'] = data;

fn()

})

fs.readFile('./age.txt','utf8',function(err,data){

schoolInfo['age'] = data;

fn()

})发布订阅代码语言:javascript复制 let dep = {

arr:[],

emit(){

this.arr.forEach(fn=>fn())

}

on(fn){

this.arr.push(fn)

}

}

dep.on(function(){

if(Object.keys(schoolInfo).length===2){

console.log(schoolInfo)

}

})

fs.readFile('./name.txt','utf8',function(err,data){

schoolInfo['name'] = data;

dep.emit()

})

fs.readFile('./age.txt','utf8',function(err,data){

schoolInfo['age'] = data;

dep.emit()

})

相关推荐

华硕主板如何更新BIOS_华硕主板BIOS怎么更新
谁有365比分链接

华硕主板如何更新BIOS_华硕主板BIOS怎么更新

07-22 👁️ 2328
浪的成语
日博365客服电话

浪的成语

01-07 👁️ 4108
战舰少女r经验值统计与练级天数表一览
日博365客服电话

战舰少女r经验值统计与练级天数表一览

10-03 👁️ 1763
中华道藏中有哪些修行功法、术法,列举20个