js公共方法的封装并全局挂载

一、封装js

在项目目录的common下新建一个js文件
在这里插入图片描述

msgcfg.js

import commonApi from "@/api/common/apiMethod.js";

function getMsg(msgCode){
	return new Promise((resolve, reject) => {
		commonApi.getAppVersion(msgCode).then(res => {
			if (res.data.code === "0") {
				var data = res.data.data ? res.data.data : {}
				if(data.versionName){
					resolve(data.versionName);
				}
			}
		}).catch(err => {
			reject(err)
		});
		
	})
}

export default {
	getMsg
}

这里我是用了封装的请求库的,用uni.request也是一样的:

function getMsg2(msgCode) {
	return new Promise((resolve, reject) => {
		uni.request({ 
			url : '',
			method : "POST",
			data : msgCode,
			success: (res) => {
				resolve(res.data.data.versionName);
			},
			fail:(err)=>{
				reject('err')
			}
		})
	})
}

二、全局挂载

vue的全局挂载
在这里插入图片描述

三、使用

  async checkVersion(){
  		let msg =  await this.$msg.getMsg("ios")
    	console.log('msg.........',msg )
  }

这里使用async和await以及Promise保证数据的同步,这种适用于封装调用接口的js。

坑:Nvue文件无法使用main.js全局引入的文件

因为 .vue 和 .nvue 并不是一个规范,因此一些在 .vue 中适用的方案并不适用于 .nvue。 Vue 上挂载属性,不能在 .nvue 中使用。
这是nvue的一个弊端,暂时没找到办法解决。
替代的办法就是需要用的nvue页面单独引一下要用的js文件。

在nvue页面单独引入js文件:
在这里插入图片描述
在methods中定义一个方法:

async update(){
	console.log('msg.........', await msgcfg.getMsg('ios'))
}

按钮加个事件就可以了:
在这里插入图片描述

为什么用async… await…

因为方法里执行是异步的,接口还没有返回程序会继续往下执行,return会返回null。
为了解决这个问题,我尝试用回调,但回调带来的问题是使用上的不便,你需要在调用函数的时候用箭头函数去接收返回的值,这会让调用的地方多一层函数体嵌套:

import commonApi from "@/api/common/apiMethod.js";

export default function(platform, callback) {
	commonApi.getAppVersion(platform).then(res => {
		if (res.data.code === "0") {
			var data = res.data.data ? res.data.data : ""
			if(data){
				callback && callback(data.versionName);
			}
		}
	}).catch(err => {
		console.log(err);
	});
}
update(){
	msgcfg('ios',res => {
		console.log('msg.....',res)
	});
}

在封装的过程中,发现使用async… await… 用于等待一个异步方法执行完成,可以达到回调的效果,同时使用起来更加优雅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雄不是大熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值