react相关知识点记录

1. async/await

理解 JavaScript 的 async/await

async 的作用

async 函数返回的是一个 Promise 对象

如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象,直接可以用then() 链来处理这个 Promise 对象

如果 async 函数没有返回值,会返回 Promise.resolve(undefined)。

await 到底在等啥

await 只能出现在 async 函数中

await 等待的是一个表达式,这个表达式的计算结果是 Promise 对象或者其它值(换句话说,就是没有特殊限定)

如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西

如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果

举例


// APP中获取did
const getAppDid = () => new Promise((resolve, reject) => {
    if (window.self !== window.top) {
        if (appDid) {
            resolve(appDid);
        } else {
            clearTimeout(timer);
            timer = setTimeout(() => {
                if (appDid) {
                    resolve(appDid);
                } else {
                    reject();
                }
            }, 200);
        }
        return;
    }
});

static async follow(token, rid) {
        const did = await getAppDid();

        return new Promise((resolve, reject) => {
            getAppCsrf(() => {
                ajaxFn({
                    url: config.follow,
                    type: 'POST',
                    data: {
                        rid,
                        did,
                        token,
                        [$SYS.tn]: mCookie.getItem($SYS.tvk)
                    },
                    success: (res) => {
                        resolve(res);
                    },
                    error: () => {
                        reject();
                    }
                });
            });
        });
    } 

2. redux-thunk 和 redux-observable

关于异步操作

redux-observable

redux-observable 使用小记

自动响应我们所dispatch的actions并执行对应的函数,把复杂的异步函数分离到一些Epic的函数里面

redux-observable 将从 ui 触发的 action 转化为一个数据流,并且订阅它。当数据流有数据发出时,这个流的数据管道中设置了对此数据流做的一系列的操作符( rxjs 提供),数据流通过管道后,将最终的流转成 action

Epics函数

传进一个action,然后return一个新的、不一样的action

这个Epics函数是一个发射器,因此我们能够subscribe它,从而可以监听并收到新的action

每当我们调用redux的dispatch的时候,所有的Epics函数都会执行

import { Observable } from 'rxjs/Rx';
import { ajax } from 'rxjs/observable/dom/ajax';

import * as actions from '../actions';
// action将封装成Observable对象传入到函数内
function fetch(action$) {
    // 使用ofType方法匹配相应的action
    return action$.ofType('GET_DATA')
        // switchMap 是一个高阶的操作符,它一般用在 ajax 网络服务请求上,主要处理多个内部 Observable 对象产生并发的情况下,只订阅最后一个数据源,其他的都退订,这样的操作符,非常适合网络请求
        .switchMap(action => {
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值