收藏
回答

Es6 Promise执行返回reject却还是报错

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug promise 客户端 1 2.0.0


- 当前 Bug 的表现(可附上截图)


- 上次进入页面后缓存了用户storage(unionid,value);(key,value)

  当循环中的unionid不在缓存中的时候确实是走了reject方法,但是同时报警告了

//引入工具方法

var prom = require("../../../utils/prom.js");

//获取数据 遍历数据

e.data.map((item, index, arr) => {

//如果数据在缓存中执行dosomething

//如果数据不在缓存中答应error

prom.wxPromisify(wx.getStorage)({

key: item.unionid,

}).then(function(res){..//dosomething},

           function(error){console.log("error")})//确实打印了,但是报错了


}

- 非侵入性的工具方法

var Promise = require('bluebird.js');

function wxPromisify(fn){

return function (obj = {}) {

return new Promise((resolve,reject) => {

obj.success = function (res) {

resolve(res)

}


obj.fail = function (res) {

reject(res)

}


fn(obj)

})

}

}


module.exports = {

wxPromisify: wxPromisify

}


最后一次编辑于  2018-07-03
回答关注问题邀请回答
收藏

2 个回答

  • 读作绅士写作变态的熊吉
    读作绅士写作变态的熊吉
    2018-07-03

    不懂帮顶

    2018-07-03
    有用 1
    回复 1
  • 我真的是自然卷
    我真的是自然卷
    2018-07-05

    https://segmentfault.com/a/1190000004559403 首先这是bluebird 给出的对异常处理的译文(很感谢这个译文作者)


    这里提到错误时候执行返回的并非是Error对象,由promise抛出的值并非Error类型,导致产生了warning

    结合小程序api  WX.getStorage 方法里面的fail 并没有写 返回参数的类型!

    所以我们需要对工具方法中的reject进行修改

    obj.fail = function (res) {

    reject(new Error("fail"))

    }

    这样就解决啦


    2018-07-05
    有用
    回复
登录 后发表内容