收藏
回答

IOS端 当Promise与异步函数一起使用时 特定情况下永远不会settled

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 微信iOS客户端 8.0.16 2.22.3
const app = getApp()


function wait(delay{
  return new Promise(resolve => setTimeout(resolve, delay))
}


const requestAuth = async() =>  {
  return request(false)
}


async function request(auth = true{
    await Promise.resolve()
    await wait(300);
    if (auth) {
      await requestAuth()
    }
    return true
}


Page({
  onLoad() {
        request().then(
          () => {
            //在ios既不会执行到这里 也不会报错
            wx.showModal({
              title'在ios上始终无法出现的modal',
            })
          },
          console.error
        )
  },
})
回答关注问题邀请回答
收藏

5 个回答

  • chyi
    chyi
    2022-01-06

    iOS JavaScriptCore 的 async 函数存在 bug https://bugs.webkit.org/show_bug.cgi?id=161942

    使用 async 函数时请打开开发者工具的【将 JS 编译为 ES6】选项或者自行转换。

    2022-01-06
    有用
    回复
  • Sam
    Sam
    2022-08-09
    async function ff(resolve2) {
    	await new Promise(function(resolve1) {
    		resolve1();
    		// setTimeout(resolve1, 1000);
    	});
    	resolve2();
    	console.log('aresolve resolve resolve resolve resolve resolve');
    }
    
    
    new Promise(function(resolve2) {
    	return ff(resolve2);
    }).then(function() {
    	console.log("done done done done");
    });
    
    // 只要用了定时器就有问题,看注释
    // 到底是ios自身问题,还是框架问题,到现在还没有解决
    
    2022-08-09
    有用
    回复
  • 韦不吕
    韦不吕
    2022-03-11

    今天刚遇到;各位怎样解决?

    2022-03-11
    有用
    回复
  • 陈靖
    陈靖
    2022-01-06

    你return一个true,true身上有.then方法吗?

    2022-01-06
    有用
    回复 14
    • Jesse
      Jesse
      2022-01-06
      这跟我return什么没关系吧
      2022-01-06
      回复
    • Jesse
      Jesse
      2022-01-06
      难道异步函数中不允许return true吗
      2022-01-06
      回复
    • 陈靖
      陈靖
      2022-01-06回复Jesse
      不是不允许return true。我认为链式调用,后面的.then()方法依赖的是上一个函数的返回值
      2022-01-06
      回复
    • Jesse
      Jesse
      2022-01-06
      兄弟,你应该好好看看异步函数的用法,异步函数被调用后始终返回Promise
      2022-01-06
      回复
    • xplee
      xplee
      2022-01-06回复Jesse
      async/await 以及 Promise,回炉重炼一下吧
      2022-01-06
      回复
    查看更多(9)
  • Jesse
    Jesse
    2022-01-06

    我真服了,昨天因为找这个bug 我10点才下班

    2022-01-06
    有用
    回复 2
    • 、WWTT
      、WWTT
      2022-06-21
      兄弟,最后怎么解决的呢
      2022-06-21
      回复
    • Jesse
      Jesse
      发表于小程序端
      2022-09-13回复、WWTT

      开了es6转es5,官方都说了没法解决,也就是不能使用原生异步函数,

      2022-09-13
      回复
登录 后发表内容