Closed
Description
问题描述
[问题描述:尽可能简洁清晰地把问题描述清楚]
uni.createBLEConnection
是一个异步函数,框架没有把他 Promisify
,返回的不是 Promise
复现步骤
[复现问题的步骤]
console.log(uni.createBLEConnection());
可以看到返回值不是 Promise
预期结果
[使用简洁清晰的语言描述你希望生效的预期结果]
实际结果
[这里请贴上你的报错截图或文字]
系统信息:
- 发行平台: 微信小程序
- 操作系统: 全平台
- HBuilderX版本 [如使用HBuilderX,则需提供 HBuilderX 版本号]
- uni-app版本 v2.6.9
- 设备信息 全平台
补充信息
[可选]
[根据你的分析,出现这个问题的原因可能在哪里?]
@dcloudio/uni-mp-weixin/index.js
中判断是否被 Promisify
的逻辑如下
const SYNC_API_RE =
/^\$|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
const CONTEXT_API_RE = /^create|Manager$/;
const ASYNC_API = ['createBLEConnection'];
const CALLBACK_API_RE = /^on|^off/;
function isContextApi (name) {
return CONTEXT_API_RE.test(name)
}
function isSyncApi (name) {
return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1
}
function isCallbackApi (name) {
return CALLBACK_API_RE.test(name) && name !== 'onPush'
}
function handlePromise (promise) {
return promise.then(data => {
return [null, data]
})
.catch(err => [err])
}
function shouldPromise (name) {
if (
isContextApi(name) ||
isSyncApi(name) ||
isCallbackApi(name)
) {
return false
}
return true
}
可以看到,在 shouldPromise
中执行 isContextApi(name)
时,因为 createBLEConnection
是 create
开头的,满足了 isContextApi
的条件,返回了 true
, 导致 shouldPromise
返回了 false
。代码中存在 const ASYNC_API = ['createBLEConnection'];
片段,可以看出考虑了这个函数的 Promisify
,却有逻辑漏洞。将 isContextApi
函数修改为以下逻辑可修复错误
function isContextApi (name) {
return CONTEXT_API_RE.test(name) && ASYNC_API.indexOf(name) === -1
}
Metadata
Assignees
Labels
No labels