UNPKG

s94-node

Version:

常用的node工具方法封装---牧人与鱼

126 lines (106 loc) 3.23 kB
# s94-node > 常用的一些工具函数 ## Install ``` $ npm install s94-node ``` ## Usage 基本用法 ```js const $ = require('s94-node'); //传入字符串,等同require const fs = $('fs'); //传入函数,创建回调函数队列对象,等同于new $.Read(); $(function(next){ console.log('开始'); setTimeout(()=>{next('字符串')},1000) }).then(function(next, data){ console.log(str); }) ``` ### **Ready([f]).then(f)** 回调函数队列对象,主要用于大量异步操作、动画等操作 * f `Function` 执行的回调函数,也可以在then方法里面传入 * 回调函数接收两个参数 * @param {*} next 调用队列中的下一个函数,可以传一个参数 * @param {*} data 上一个函数return的数据(不为undefined);或者上一个函数next方法执行传入的参数(只能传一个) * 返回: `Ready` 回调函数队列对象 * `Ready`.then(f) f `Function` 添加回调函数到队列里面 ```js //标准写法 var r = new $.Read(function(){}) //便捷写法 var r = $.Read(function(){}); var r = $(function(){}); //三种写法效果一样 //-----------用法---------- //写一个爬虫 http.request(url1, (res)=>{ res.on('end',() => { //分析url1中的内容,获取指定地址url2 http.request(url2, (res)=>{ res.on('end',() => { //分析url2中的内容,获取需要的地址url3 http.request(url3, (res)=>{ res.on('end',() => { //分析url3中的内容,获取需要的地址url4 //....... }) }) }) }) }) }) //用回调函数队列对象 $(function(next){ http.request(url1, (res)=>{ //分析url1中的内容,获取指定地址url2 next(url2); }) }).then(function(next, url2){ http.request(url2, (res)=>{ //分析url2中的内容,获取指定地址url3 next(url3); }) }).then(function(next, url3){ http.request(url3, (res)=>{ //分析url3中的内容,获取指定地址url4 next(url4); }) }).then(function(next, url4){ //...... }) ``` >关于和`Promise`的区别 1、`Promise`主要是构建一个更方便的异步执行的方式;`Ready`主要是建立一个函数执行队列。 `Promise`对不同异步执行的结果进行处理,拥有fulfilled和fulfilled两个状态,传入两个方法(resolve, reject)成功和失败分别调用;`Ready`只有一个方法(next)表示执行下一个函数;所以`Ready`主要用于多个操作队列的情况下 2、`Promise`的then方法返回的并不是原来的`Promise`对象;`Ready`的then方法返回的并不是原来的`Ready`对象。如下 ```js var r = $(function(next){ next(); }) var r2 = r.then(function(next,data){}) console.log(r2===r); //true var r = new Promise(function(ok, fail){ ok(); }) var r2 = r.then(function(data){}) console.log(r2===r); //false //所以下面三种写法,写法2和其余两种不同 //写法1 var r = new Promise(function(ok, fail){ ok(); }).then().then(); //写法2 var r = new Promise(function(ok, fail){ ok(); }); r.then(); r.then(); //写法3 var r = new Promise(function(ok, fail){ ok(); }) r = r.then(); r = r.then(); ```