Vue学习之promise
先解决前面留下的一个问题,如果引用的文件路径太长了,我们反复引用类似的文件太麻烦了,所以我们需要给一些文件起别名。
<img slot="item-icon-active" src="./assets/img/tabbar/money-active.svg" alt="">
这里我们希望src中的内容能够更加简短一些,所以我们要找到这个配置文件build下面的webpage.base.conf.js。在这个文件中我们能够找到配置别名的地方:
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      '@': resolve('src'),   //@代替src
      'assets':resolve('src/assets'),    //assets代替src/assets
    }
  },
alias中的内容就是了,我们添加了assets的内容后上面的img可以用下面的代码替换掉:
<img slot="item-icon-active" src="~assets/img/tabbar/money-active.svg" alt="">
这里注意要加上波浪号~来让代码识别出这个assets才可以。
开始学习Promise。Promise是Es6中的语法,它是异步编程的一种解决方案。我们比较常见的是在网络请求中,用户发送网络请求的时候我们不会让用户阻塞在那,而是希望继续和用户交互,等网络请求回来的时候再回调一个函数。
Promise的基本语法:
假设有异步操作:一次setTimeout假设是一次网络请求
        setTimeout(()=>{
            console.log("helloworld")
        },1000)
函数Promise传入的两个参数resolve和reject都是函数
        new Promise((resolve,reject)=>{
        })
实际写成:
        new Promise((resolve,reject)=>{
            //第一次网络请求的代码
            setTimeout(()=>{
                resolve()
            },1000)
        }).then(()=>{
            //第一次拿到结果的代码
            console.log("hellow world")
            console.log("hellow world")
            console.log("hellow world")
            console.log("hellow world")
            return new Promise((resolve,reject)=>{
                //第二次网络请求的代码
                setTimeout(()=>{
                resolve()
                },1000)
            }).then(()=>{
                //第二次拿到结果处理的代码
                console.log("hello js")
                console.log("hello js")
                console.log("hello js")
            })
        })
感觉是看上去复杂了,但是实际是清晰了,因为所有网络请求的代码都在promise下面,所有的结果处理代码都划分到了then里面。结果处理完成后跟一个return就可以接下一次的请求。无论是多少次我们都可以按照顺序看到内容,这种就是链式编程。
什么情况下会用到Promise?一般是有异步操作时候使用Promise对即将进行的异步操作进行封装。一旦有异步操作的时候用promise包起来,拿到结果之后不要在回调函数中处理,用resolve包起来之后在then中进行处理。成功的时候用resolve,失败的时候就把错误信息放在reject中然后在then的同级使用.catch来处理。

                    
                
                
            
        
浙公网安备 33010602011771号