uniapp_新建项目_uniapp项目_uni.promisify.adaptor.js
不勾选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语法。
| 传统回调风格的API | Promise风格的API |
|---|---|
| 微信小程序:wx.request | async/await |
| uniapp自身:uni.chooseImage | async/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.request、uni.chooseImage等核心API默认支持Promise风格,正是依赖这个适配器处理底层回调转换。
总结
uni.promisify.adaptor.js的核心作用是:
作为UniApp框架的异步适配层,将多端API的回调风格统一转换为Promise风格,支持async/await语法,提升开发效率和代码可读性。
它是UniApp实现write once, run anywhere的重要细节之一,隐藏了不同平台的异步API差异,让开发者可以用统一的方式处理异步操作。
如果你的项目中需要自定义Promise化的函数(比如封装第三方库的回调API),也可以参考这个适配器的实现逻辑,确保多端兼容性。
更多推荐
所有评论(0)