uni.createSelectorQuery 如何变成同步操作
时间: 2024-05-15 13:16:27 浏览: 309
uni.createSelectorQuery 是一个异步操作,无法直接变成同步操作。但是可以使用 Promise 或 async/await 的方式将其包装成同步操作。
使用 Promise 的方式:
```javascript
function querySelector(selector) {
return new Promise(resolve => {
uni.createSelectorQuery().select(selector).boundingClientRect(rect => {
resolve(rect)
}).exec()
})
}
async function test() {
const rect = await querySelector('#my-element')
console.log(rect)
}
```
使用 async/await 的方式:
```javascript
function querySelector(selector) {
return new Promise(resolve => {
uni.createSelectorQuery().select(selector).boundingClientRect(rect => {
resolve(rect)
}).exec()
})
}
async function test() {
const rect = await new Promise(resolve => {
uni.nextTick(() => {
resolve(querySelector('#my-element'))
})
})
console.log(rect)
}
```
在使用 async/await 的方式时,需要将 uni.createSelectorQuery().select(selector).boundingClientRect(rect => {...}).exec() 放在 uni.nextTick() 中执行,否则会出现“Cannot read property 'top' of null”等错误。
阅读全文