s94-node
Version:
常用的node工具方法封装---牧人与鱼
126 lines (106 loc) • 3.23 kB
Markdown
# 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();
```