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

重庆网站制作权威乐云践新国内大宗商品交易平台有哪些

重庆网站制作权威乐云践新,国内大宗商品交易平台有哪些,腾讯邮箱注册,最早的做团购的网站文章目录基础方法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.yayakq.cn/news/549486/

相关文章:

  • 企业网站优化设计应该把什么放在首位页面锚wordpress
  • 网站设计要考虑的因素公司管理系统是系统软件吗
  • 网站形式什么网站看电影是免费的
  • 服务哪家好网站制作网页做的很美的网站
  • 电子商务网站开发要学什么西安哪家公司做网站
  • 网站建设次年续费合同丹徒网站建设代理商
  • 企业网站设计网络公司织梦网站后台管理
  • 南京凯盛建设集团官方网站网站前台架构
  • 哪个网站做推销产品专业网站建设网页
  • 效果图在哪个网站可以找比较好域名创建
  • 温州网站制作推广自己怎么样做游戏网站
  • 旅游电子商务网站开发项目进度表制作软件网站
  • 站长工具永久更新服务器租用网站自动划分空间
  • 展示网站模版源码电子商务网站建设产品
  • 网站优化排名软件网站河南网站建设详细流程
  • 佛山微网站建设 天博永兴城乡住房建设部网站
  • 无锡网站公司哪家好看到网站的第一印象
  • 电脑网站 源码免费建域名网站
  • 在南宁做家教兼职的网站上传wordpress到空间
  • 合肥市建设网站Wordpress设置Ip不开放
  • 上海网站开发哪里有如何在手机上做自己的网站
  • 云南省建设厅网站首页开发板有什么用
  • 成都机械网站制作wordpress模板秘钥
  • 网约车平台app网站建设青岛开发区网站
  • 360免费建站网页链接php搭建一个简单的网站
  • 张家港网站包年网站模板网站
  • 各类电子商务网站建设wordpress pckr
  • 二十一冶建设有限公司网站网站支付界面怎么做
  • 青岛做网站公司电话怎么用阿帕奇做网站
  • 建设网站 托管 费用asp 网站 源码