微信小程序--promistic解析

例子:

	const promisic = function (func) {
	    return function (params = {}) {
	      let a= new Promise((resolve, reject) => {
	        const args = Object.assign(params, {
	          success (res)  {
	            resolve(res);
	          },
	          fail: (error) => {
	            reject(error);
	          }
	        });
	        func(args);
	      });
	      return a
	    };
	  };
	
	  export{
	      promisic
	  }

1、Promise 是什么 怎么用

Promise是JS中进行异步编程的新的解决方案。
Promise是个构造函数,Promise对象用来封装一个异步操作,并可以获得其结果。

        const p = new Promise((resolve, reject) => {
            console.log("z1")       
            setTimeout(() => {
                resolve({ a: 100 })
                // reject("zzz2")
            }, 1000)
        })

        console.log(p)  //promise

        p.then(value => { console.log(value) }).catch(
            reason => { console.log(reason) }
        )  //object

2、assign 是什么 怎么用

将所有可枚举和自有属性从一个或多个源对象复制到目标对象,返回修改后的对象。

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }

3、promistic函数的含义

避免回调地狱,回调函数嵌套回调函数。

4、回调函数 callback

4.1 小程序里为什么要使用回调函数?

首先,入口函数里的代码需要封装,不可能所有的函数都写在主界面
比如:入口:调用主题对象里获取图片的方法得到一个主题图片——》主题对象:调用封装的HTTTP请求——》HTTP请求:调用微信小程序的http请求。

然后,由于入口需要给界面赋值,必须等到获取函数的返回值才能赋值,那么存在一个先后顺序,先等待请求结束 后赋值。不可能直接用普通的函数获取,如果是普通函数,那么由于js的异步性,无法获取到请求的数据就会给界面赋值。
因此 需使用 回调函数。

4.2 什么是回调函数

	 function fn1(callback) { //可以不用callback命名 ,比如 f1 a m 都是可以的
	     a = 1000
	     callback(a)
	 }
	
	 var b = 9
	
	 fn1(a => {   //匿名函数 作为回调函数
	     let c = a + b
	     console.log(c)
	 })

5、async 和 await

async 修饰的函数返回一个promise

        async function add() {
            return 1    
            //throw 2       
            //return Promise.reject(3)
            //return Promise.resolve(4)
            // return new Promise((resolve,reject)=>{
            //     setTimeout(() => {
            //         resolve(5)
            //     }, 1000)
            // })
        }

        const a = add()

        a.then(
            value => console.log("resolve", value)  //1 4
        ).catch(
            reason => {
                console.log("rejected",reason) //2 3 5
            }
        )


await 必须写在 async 函数中
await 修饰的函数 如果返回的是 promise 那么await 将获取 promise resove 的值
如果返回的是 reject 必须使用 try catch捕获 如果不捕获将抛出异常 可在async 外层捕获
如果返回的不是 promise ,将返回函数的值
如果函数报错 通过try catch 捕获

        function fn2() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    reject(1)
                }, 1000);
            })
        }

        function fn4() {
            throw 2
            //return 3
        }

        async function fn3() {
            // try {
                 const vlaue = await fn2()
                 return vlaue
            // } catch (error) {
            // }

            // try {
            //     const value = await fn4()
            // } catch (error) {
            //     console.log(error)
            // }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值