- 当前 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
}
https://segmentfault.com/a/1190000004559403 首先这是bluebird 给出的对异常处理的译文(很感谢这个译文作者)
这里提到错误时候执行返回的并非是Error对象,由promise抛出的值并非Error类型,导致产生了warning
结合小程序api WX.getStorage 方法里面的fail 并没有写 返回参数的类型!
所以我们需要对工具方法中的reject进行修改
obj.fail = function (res) {
reject(new Error("fail"))
}
这样就解决啦