不勾选uni-app x框架


目录,还是,4个文件夹,6个文件。

可以对比,勾选了x框架的这篇文章

多了一个文件,文件是:uni.promisify.adaptor.js

这个文件是什么?promis适配器


要理解uni.promisify.adaptor.js的作用,

我们需要从UniApp的异步编程模型多端兼容需求入手:

1 - 核心功能:Promise化适配器

uni.promisify.adaptor.js是UniApp框架提供的回调函数转Promise的适配层

用于将传统回调风格的API(如微信小程序的wx.request,或UniApp自身的uni.chooseImage)转换为Promise风格

从而支持async/await语法。

传统回调风格的APIPromise风格的API
微信小程序:wx.requestasync/await
uniapp自身:uni.chooseImageasync/await

2 - 具体作用细节

UniApp需要兼容多个平台:微信/支付宝/百度小程序、H5、App等,

而不同平台的API回调格式可能存在差异:比如回调参数的结构错误处理的方式

uni.promisify.adaptor.js的主要职责是:

统一回调格式 - resolve - reject适配:将不同平台的success/fail/complete回调统一转换为Promise的resolve/reject

处理平台差异 - res.data - res.result:适配不同平台API的参数结构(比如某些平台的回调参数是res.data,而另一些是res.result),确保Promise的返回值符合预期。

支持自定义转换 - async - await:允许开发者扩展适配器,处理第三方库自定义组件中的回调函数,使其支持async/await

3 - 举个例子:传统回调 vs Promise风格

假设我们要调用微信小程序的wx.getStorageAPI(回调风格):

wx.getStorage({
	key: 'token',
	success(res) { console.log(res.data) },
	fail(err) { console.error(err) }
})

通过uni.promisify(依赖uni.promisify.adaptor.js)转换为Promise风格后,可以用async/await简化:

const getStorage = uni.promisify(wx.getStorage)
async function getToken() {
	try {
		const res = await getStorage({ key: 'token' })
		console.log(res.data)
	} catch (err) {
		console.error(err)
	}
}

4 - 为什么需要这个适配器?

  • 多端兼容:不同平台(如微信、支付宝、H5)的API回调格式可能不同(比如支付宝小程序的my.getStorage回调参数是res,而微信是res.data),适配器会统一这些差异,确保Promise返回值的一致性。
  • 代码可读性async/await比==嵌套回调(回调地狱)==更易读和维护。
  • 框架集成:UniApp的uni.requestuni.chooseImage核心API默认支持Promise风格,正是依赖这个适配器处理底层回调转换。

总结

uni.promisify.adaptor.js的核心作用是:

作为UniApp框架的异步适配层,将多端API的回调风格统一转换为Promise风格,支持async/await语法,提升开发效率和代码可读性

它是UniApp实现write once, run anywhere的重要细节之一,隐藏了不同平台的异步API差异,让开发者可以用统一的方式处理异步操作。

如果你的项目中需要自定义Promise化的函数(比如封装第三方库的回调API),也可以参考这个适配器的实现逻辑,确保多端兼容性。

更多推荐