Es6 Promise执行返回reject却还是报错
发布于 6 年前 作者 ming82 18259 次浏览 来自 问答
  • 当前 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

}

2 回复

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

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

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

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

obj.fail = function (res) {

reject(new Error("fail"))

}

这样就解决啦

不懂帮顶

回到顶部