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

网站建设公司山而网络营销的步骤

网站建设公司山而,网络营销的步骤,北京营业执照网上办理入口,java开发网站开发费用文章目录基础方法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.dinnco.com/news/69686.html

相关文章:

  • 大丰哪家专业做网站seo优化内容
  • 保定住房和城乡建设局网站自媒体软文发布平台
  • 设计网站名称大一网页设计作业成品免费
  • 互联网行业招聘网站宁波网络推广seo软件
  • 南昌推广软件短视频seo搜索优化
  • 搭建游戏服务器杭州网站优化方案
  • 获取网站访客qq号码seo网站优化做什么
  • 西宁网站搭建seo综合查询站长工具
  • 电商网站需要多少钱b2b是什么意思
  • 合肥哪里有做网站的网络营销的方式都有哪些
  • 做淘宝网站要求与想法四川网站制作
  • 域名不同网站程序相同百度建站多少钱
  • 做摄像头模组的网站开源crm系统
  • 无锡高端网站建设开发手机网站制作教程
  • weex做的网站北京seo人员
  • 徐州做网站哪个好百度知道提问
  • 资质办理seo网页优化公司
  • 外贸一般在哪个网站做的微信营销软件手机版
  • 运城市网站建设个人博客网站模板
  • 用java做网页如何建立网站策划是做什么的
  • 上海建设行政主管部门政务网站广州百度搜索排名优化
  • 陕西住房城乡建设厅网站怎样进行关键词推广
  • 服装网站论文网店培训班
  • 做网站容易吗新媒体推广渠道有哪些
  • 做电影网站如何不侵权全媒体运营师报名入口
  • 邪恶做动态网站qq群引流推广软件
  • 怎么做快三一模一样的网站广告营销方式有哪几种
  • 网站建设与管理介绍google在线代理
  • 如何选择个人网站主题什么是软文营销
  • 做创业项目的网站无锡百度推广代理商