vuex&promise相关知识点

313 阅读2分钟

Vuex

Vuex的基本改变

  • state: 状态;
  • mutation: 同步的修改状态;
  • action: 1、异步的修改状态; dispach一个action出来做修改;action里面提交的是mutation; 2、action函数接收一个context,store实例相同的方法和属性的对象{commit, getter, state}
  • getter: 获取state;

vuex的使用场景

vuex是为了解决组件间通信而生的,并不是为了简要的缓存而成;所以以下的情况并不适应vuex来实现,如之前的支付页面就适用于vuex来实现——复杂的状态处理组件;
  • 客户类型,存储,在页面加载的时候去获取一波;
  • 标签类型:获取标签,标签更新,同步;

vue的两个小知识点

prop的值和子组件渲染问题

父组件异步传来的,prop,子组件中渲染是否存在异步问题?

数据更新追踪是子组件中模板中用到prop值,prop值是会被追踪到的更新的;但是子组件拷贝了一下父组件的prop,切断了追踪,要知道更新的话只能watch;

computed和watch;

computed就是一个纯函数,返回的是一个新的属性出来;watch就是监听一个属性的变化,做一些操作;

Promise

Promise基本概念

promise是对异步编程的一种实现,解决传统回调地狱,事件机制的等异步的问题;

Promise的特性

  • promise有三种状态,分别是resolve,reject,pedding;状态一但改变就不可逆;
const a = new Promise((resolve,reject)=> {
    // <!-- 异步成功 -->
    if() {
        const res = getList()
        resolve(res);
    // <!-- 异步失败 -->
    } else {

    }
});

a.then((res) => {
    <!-- resolve以后的执行回调 -->
    console.log(res);
}).catch(()=> {

})
  • promise实例创建了就会立马执行,先执行完当前的同步操作,然后才会执行then里面的异步回调;
const promise = new Promise((resolve,reject) => {
    console.log('11');
    resolve();
    console.log('22');
})
promise.then(() => {
    console.log('333');
});

// 11
// 22
// 333
  • promise.all() 将多个promise实例,变为一个新的promise实例;
const promise = Promise.all([p1,p2,p3])
p1,p2,p3状态都改变了(可能这个状态是reject),就会调用promise.then;
  • promise.race()

    返回状态最先改变的那个状态,这个可能是reject

  • promise的错误异常机制:

    错误都是从内到外,只要捕获到就处理;如果内部状态被捕获到就变为reject,状态改变;

await, async

await, async是对Generator的一种封装。
  • async getAllList函数返回的是一个Promise; await函数获取到的是该getList函数promise执行完以后的值;
async getAllList() {
    await getList();
}
  • await 后面是一个promise,就返回这个promise的结果值;如果是原始值,就返回这个原始值;
  • 连续的async封装调用的,用到async的函数就要把该函数变为async;
  • async封装的返回值或者错误会导致这个promise的状态改变;