| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- export function useConfirm() {
- const confirm = (options) => {
- return new Promise((resolve, reject) => {
- // 唯一ID,彻底隔离每个弹窗
- const eventId = Date.now() + '_' + Math.random().toString(36).substr(2, 9)
- const resultEvent = `confirmResult_${eventId}`
- let isFinished = false
- let timeoutTimer = null
- // 接收结果
- const handleResult = (result) => {
- if (isFinished) return
- isFinished = true
- clearTimeout(timeoutTimer)
- uni.$off(resultEvent, handleResult)
- if (result) resolve(true)
- else reject(new Error('cancel'))
- }
- // 监听自己的结果
- uni.$on(resultEvent, handleResult)
- // 打开全局弹窗
- uni.$emit('showConfirm', {
- ...options,
- eventId
- })
- // 超时保护
- timeoutTimer = setTimeout(() => {
- if (isFinished) return
- isFinished = true
- uni.$off(resultEvent, handleResult)
- reject(new Error('timeout'))
- }, 60000)
- })
- }
- return confirm
- }
|