iOS-8 的 Promise 支持问题?
发布于 7 年前 作者 taoyong 19320 次浏览 来自 问答

我看了 3.08 的更新文档,里面提到了更为全面的 es6 接口支持,当时看到的表格,Promise 的 iOS8 下没有打叉的应该是支持了。

但是今天发现在 iOS 8 中的 Promise 依然为 null。

是我哪里设置有误么?

9 回复

iOS 8.4.1 Wechat 6.5.7

WeChatLib: 1.1.1 (2017.4.12 16.55.09)

在手机上打开调试

看下SYSTEM页卡中的WeChatLib的版本是什么

无法执行 并且不报错,原来这么久就发现了这个问题,官方的文档并没有修改··················

都这么久了,还是没处理啊,唉

这个版本应该是这次 promise 的

直接打印出来是null么?

app.js 代码

App({
/**
  * 程序异常
  * [@param](/user/param) err
  */
 onError(err) {
console.error(err);

 },

});

pages/index/index.js 代码

Page({
onShow(){

this.init().then(() => {
this.setData({app: 'ok'});
   })

},
 init(){
return new Promise((resolve, reject) => {
setTimeout(() => {
this.setData({ok: resolve.toString()})
resolve();
     }, 3000)
});
 }
})

pages/index/index.wxml

<view>{{ok}}</view>
<view>{{app}}</view>

模拟器结果

123

ok

手机iPhone6 plus ios8.3(12F70)  微信版本6.5.8

结果

123

ES6 -> ES5 为Babel自己手动转换

手机上小程序开调试模式 微信闪退

Babel后代码如下

"use strict";

/**
* 初始化小程序APP
*/
App({
/**
  * 程序异常
  * [@param](/user/param) err
  */
 onError: function onError(err) {
console.error(err);
 }
});
'use strict';

Page({
onShow: function onShow() {
var _this = this;

   this.init().then(function () {
_this.setData({ app: 'ok' });
   });
 },
 init: function init() {
var _this2 = this;

   return new Promise(function (resolve, reject) {
setTimeout(function () {
_this2.setData({ ok: 123 });
       resolve();
     }, 3000);
   });
 }
});

是的,是 null。在不特殊处理的情况下。相同而 promise 代码,iOS 8下无法执行,并且有而且也不报错。

补充一下,最开始我关闭了 微信开发者工具 的工具栏 es6转es5,使用的是 babel 的转写,没有使用 polyfill。在 iOS 8 下 Promise 为 null。后来我开启了 es6转es5,效果还是一样。

无法执行并且不报错?

是不是错误没有被你catch捕获。

回到顶部