发表于: 2019-11-24 22:08:03

1 1058


编辑日报内容...

今天完成的事情:


明天计划的事情:

微信框架 

遇到的问题:


收获:

pages
APP.js是微信小程序全局配置,可以理解 如果你想在文件多创建一个文件 你可以直接在 app.json里面配置代码如下
{
"pages":[
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}}
我们要先看到 pages里面全部都是我们文件路径 ,也就是说如果你想创建一个文件可以直接在全局配置里面创建,那么它会自动在编程文件那边生成并且帮你配好。
我们看到动态图上面 当我在全局配置 pages里面把文件写完就会自动配置好文件。
注意:
刚刚有个报错,我们以前编程习惯都是在每局后面都打逗号或者分号叫结束语,但在微信框架里面,至少在全局配置里面最后一个是不能有结束语否则会报错,那么这还有个小技巧,就是模拟器会按照全局配置文件的前后顺序来显示的。


RxJS它是一种针对异步数据流程的编程,简单来说,它将一切数据,包括HTTP请求,DOM事件或者普通数据等包装成流的形式,然后用强大丰富的操作符对流 进行出来,使你能以同步编程的方式处理异步数据,并组合不同的操作符来轻松优雅事项你所需要的功能。

 

RxJS里面提供很多模块,这里主要是常用的2个Observable和fromEvent

 

异步编程几种方法

1回调函数

2事件监听/发布订阅

3Promise

4RxJS

 

先创建一个服务组件调用这个服务里面的方法

getData(){//实验样本

    return 'this is service data';

  }

这个方法是同步方法

 

 

注意

如果获取异步数据

代码如下

服务里面方法

 getCallbackData(){//异步方法获取

    setTimeout(() => {//定时器

      var name = "张三";

    }, 1000);

  }

 

组件代码

 let callbackData =  this.request.getCallbackData();

    console.log(callbackData);

打印出来的是个undefined未定义 如果这么写是获取不到异步数据的。

 

想要获取异步数据可以用回调函数如

代码如下

服务方法

getCallbackData(cs){//异步方法获取

    setTimeout(() => {//定时器

      var name = "张三";

      cs(name);

    }, 1000);

  }

在这方法括号随便打个字母,然后在外部进行回调函数

let callbackData =  this.request.getCallbackData((abc)=>{

      console.log(abc);

    });

就打印出 名字张三

 

第二种方法

promise请求异步数据

promise对象是对未来将要发生的事情,用来传递异步操作的消息

 

 

then 方法

then 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。

同时他本身自带2个参数resolve可以理解为成功后执行,reject是没成功后怎么办

代码如下

服务里面的方法

getPromiseData(){//异步方法获取

  return new  Promise((resolve,reject) => {//

      

    setTimeout(() => {//定时器

      var name = "张三--promise";

      resolve(name);

    }, 1000);

     

    },);

  }

外部调用

  var promiseData = this.request.getPromiseData();

   console.log( promiseData);

   promiseData.then((a)=>{

    console.log(a);

   })

 

效果图

计算机生成了可选文字: isdata ,ZoneAwarePromise{一一ZO门一sy順力OL一一5亡ate:nuLL Angularisrunninginthedevelopmentmode.0 [IOS]LiveReloadingenabled. —promIS

得到2种方法的打印出来的结果

 

使用rxjs方法来调用异步

首先第一步就是在你要用的地方引入rxjs它是已经安装好的直接使用。

 

//引入服务

import { RequestService } from '../service/request.service';

 

然后在服务代码

getRxjsData(){

    return new Observable((observer)=>{

      setTimeout(() => {//定时器

        var name = "张三--rxjs";

  

          observer.next(name);

          //observer.error()这是返回失败的数据

          

      }, 1000);

这里要注意下.next是以参数的形式传进去,直接传入以个Observer对象,可以理解为传输数据。

外部方法获取数据

var rxjs = this.request.getRxjsData();

   rxjs.subscribe((n)=>{

   console.log(n)

   })

这里的获取数据subscribe可以理解为获取数据的方法。

 

效果如下

我们发现rxjspromise的方法很类似,比如我们在服务里面获得参数返回数据,promise方法是resolve()   ,  rxjs的方法是next()来返回数据

外部调用数据。

rxjs用的subscribe()【订阅】来调用.   promise方法是then()来调用写法也差不多一样.

 

rxjs可以中途撤回,rxjs可以发射多个值rxjs提供多种工具函数等等

 

Rxjs unsubscribe 取消订阅

 

代码如下

ar rxjs = this.request.getRxjsData();

  var d =   rxjs.subscribe((n)=>{

   console.log(n)

   });

  

   setTimeout(()=>{

    d.unsubscribe();//取消订阅

    

   },1000)

 

  }

 

}

通过D的值直接在定时器里面1秒钟后取消订阅。

我们可以发现 promise创建后,动作是无法撤回的,但是Observable不一样,可以动过unsbscribe()方法中途撤回,而且Observable在内部做了只能处理、

rxJs订阅后多次执行

异步多次获取代码

服务组代码

getRxjs(){

  let cs = 0;

  return new Observable((observer)=>{

    setInterval(() => {//定时器

     cs++

      var name = "张三--多次执行" + cs;

        observer.next(name);

        //observer.error()这是返回失败的数据

        

    }, 1000);

  })

}

 

外部调用

var rxjs1 = this.request.getRxjs();

   rxjs1.subscribe((n)=>{

   console.log(n)

   });

效果

计算机生成了可选文字: 张三一多次执行 张三一多次执行1

注意:

promise创建后

setInterval定时器,是不能多次执行的,它是执行一次就没了。

 

Angular.x以后Rxjs6.x的变化以及使用

俗称工具方法

常用工具2

Filter map  这个 通俗解释就是filter对数据进行过滤过滤完后,map通过过滤后进行处理。

注意 要用这个2 工具的需要在用到的地方进行引入。

import {map,filter} from 'rxjs/operators'

rxjs/operators这个模块

 

然后我们看到 通过可以使用mapfilter

代码如下

通过定时器

getRxjsNum(){

  let cs = 0;

  return new Observable((observer)=>{

    setInterval(() => {//定时器

    

    

      cs++

        observer.next(cs);

        //observer.error()这是返回失败的数据

        

    }, 1000);

  })

};

外部进行调用

   var rxjs2 = this.request.getRxjsNum();

   rxjs2.pipe(

    filter((cs:any)=>{

      if( cs % 2 == 0){

     return true;

      }

    })

  ).subscribe((n)=>{

     

   console.log(n)

   });

filter必须要有这个工具才可以进行必要的筛选 获得当cs的偶数时候才返回值。

这里需要注意下要用到管道pipe方法。

 

 

map是重新修改数组。

 

代码如下

 var teacher:any;

   var rxjs2 = this.request.getRxjsNum();

   rxjs2.pipe(

    map((cs:any)=>{

      if( cs % 2 == 0){

     return cs * cs;

      }

    })

  ).subscribe((n:any)=>{

     teacher = n;

   console.log(n)

   });

  

  }

 

}

这要注意如果用的是判断那么它返回的值不经有数值还有不符符合判断的是未定数值如图

计算机生成了可选文字: undefined 4 undefined 15 undefined undefined undefined 1e2 undefined

所以可以和filter结合在一起用值接和管道挨着写就行

var teacher:any;

   var rxjs2 = this.request.getRxjsNum();

   rxjs2.pipe(

     filter((cs:any)=>{

            if( cs % 2 == 0){

           return true;

            }

          }),

    map((cs:any)=>{

      

     return cs * cs;

      

    })

  ).subscribe((n:any)=>{

     teacher = n;

   console.log(n)

   });

   

计算机生成了可选文字: 15 1e2 144

返回的就没有那个未定义数值.






返回列表 返回列表
评论

    分享到