当前位置: 首页 > news >正文

网站建设公司山而seo搜索引擎优化工资多少钱

网站建设公司山而,seo搜索引擎优化工资多少钱,河南郑州创建网站公司,优质做网站公司文章目录基础方法onlyOnce 只执行一次,第二次报错once 只执行一次,第二次无效iteratorSymbol 判断是否具有迭代器并返回迭代器arrayEach 普通数组遍历baseEach 对象类型遍历symbolEach 具有迭代器类型遍历异步遍历each异步控制流程的目的: 对…

文章目录

  • 基础方法
    • onlyOnce 只执行一次,第二次报错
    • once 只执行一次,第二次无效
    • iteratorSymbol 判断是否具有迭代器并返回迭代器
    • arrayEach 普通数组遍历
    • baseEach 对象类型遍历
    • symbolEach 具有迭代器类型遍历
  • 异步遍历
    • each

异步控制流程的目的:

  • 对异步操作提供类似同步遍历的操作
  • 本文的Promise兼容均为在原本只支持node回调的方式下修改

基础方法

onlyOnce 只执行一次,第二次报错

  • 只执行一次,因为第二次func变成了抛出错误
function onlyOnce(func) {return function(err, res) {var fn = func;func = throwError;fn(err, res);};
}

once 只执行一次,第二次无效

  • 只执行一次,因为第二次func变成了空函数
 function once(func) {return function(err, res) {var fn = func;func = noop;fn(err, res);};}

iteratorSymbol 判断是否具有迭代器并返回迭代器

var iteratorSymbol = typeof Symbol === func && Symbol.iterator;

arrayEach 普通数组遍历

- iterator:每次遍历的回调- callback:内部有个计数器,执行遍历完成后的回调function arrayEach(array, iterator, callback) {var index = -1;var size = array.length;// 三个参数情况if (iterator.length === 3) {while (++index < size) {// 传入value、key、手动计数最后遍历完成回调(只有第一次执行有效)iterator(array[index], index, onlyOnce(callback));}} else { // 两个参数情况while (++index < size) {iterator(array[index], onlyOnce(callback));}}
}

baseEach 对象类型遍历

function baseEach(object, iterator, callback, keys) {var key;var index = -1;var size = keys.length;// 三个参数情况if (iterator.length === 3) {while (++index < size) {key = keys[index];iterator(object[key], key, onlyOnce(callback));}} else { // 两个参数情况while (++index < size) {iterator(object[keys[index]], onlyOnce(callback));}}
}

symbolEach 具有迭代器类型遍历

  function symbolEach(collection, iterator, callback) {var iter = collection[iteratorSymbol]();var index = 0;var item;// 三个参数情况if (iterator.length === 3) {while ((item = iter.next()).done === false) {iterator(item.value, index++, onlyOnce(callback));}} else {// 两个参数情况while ((item = iter.next()).done === false) {index++;iterator(item.value, onlyOnce(callback));}}return index;}

异步遍历

each

  • 实现 forEach 效果
  • 原理:每次回调中执行计数器,判断计数完毕时,执行结束回调
exports.each=createEach(arrayEach, baseEach, symbolEach)function createEach(arrayEach, baseEach, symbolEach) {return function each(collection, iterator, callback) {let promise=new Promise((resolve,reject)=>{callback = once(callback || noop);var size, keys;var completed = 0;if (isArray(collection)) {size = collection.length;arrayEach(collection, iterator, done);} else if (iteratorSymbol && collection[iteratorSymbol]) {size = symbolEach(collection, iterator, done);size && size === completed && callback(null);} else if (typeof collection === obj) {// Object.keyskeys = nativeKeys(collection);size = keys.length;baseEach(collection, iterator, done, keys);}if (!size) {callback(null);reject('value should be an object');}function done(err, bool) {if (err) {callback = once(callback);callback(err);reject(err);} else if (++completed === size) {callback(null);resolve('null')} else if (bool === false) {callback = once(callback);callback(null);reject('cancel');}}})return promise.then((res)=>res).catch(err=> Promise.reject(err))};}

基本使用:

const array = { a: 1, b: 3, c: 2 };;
const iterator = function(key, value,done) {setTimeout(function() {done()// done() done只有第一次执行有效// done(err)、done(null,false) 结束遍历并执行最终回调}, key * 1000);
};// 回调方式
nac.each(array, iterator, function(err) {console.log('done')
});// Promise方式
async function neo(){try {let res=await nac.each(array, iterator);console.log('success',res);    } catch (error) {console.log('error',error)}}
http://www.mmbaike.com/news/42040.html

相关文章:

  • 网页美工设计的四大原则seo关键词优化推广哪家好
  • 简述dw网站开发流程石家庄seo全网营销
  • 宝鸡做网站市场怎么样2024近期新闻
  • 做关于网站的开题报告免费域名注册平台有哪些
  • 深圳网站公司制作关键词汇总
  • 江阴建设局网站怎么在百度做网站推广
  • 威海做网站www.whbjg做网络推广工作怎么样
  • 厦门谁需要网站建设成都网络推广中联无限
  • 帝国网站做地域标签成功的软文营销案例
  • 淘宝客的网站怎么做大数据免费查询平台
  • 网站怎么做 织梦找相似图片 识别
  • 用java做视频网站推广引流平台app大全
  • 免费网页源代码网站推文关键词生成器
  • 杭州计算机公司排名太原seo服务
  • wordpress o'connor太原seo外包公司
  • 咨询网站 获取排名网络营销工具平台
  • 做返利网站能赚钱seo还可以做哪些推广
  • 做网批那个网站好知乎推广合作
  • 湖北省和建设厅网站营销计划怎么写
  • 长春市疫情最新消息seo引擎优化怎么做
  • 学做php网站有哪些公司网站建设服务机构
  • 云南网站制作多少钱网络营销策略分析报告
  • 宝塔软件怎么做网站网络营销的四个策略
  • phpcms做双语网站怎么制作网页推广
  • 网站未做安全隐患检测怎么拿shell长尾关键词挖掘站长工具
  • 快递网站怎么做的构建新发展格局
  • 手机网站解析东莞企业网站排名
  • 网站建设做网站怎么做在线营销推广
  • 白银网站建设公司google搜索下载
  • wordpress 管理员密码忘记seo优化网站推广专员招聘