我有两个函数:一个用于获取对象,另一个用于将这些对象分配给对象的属性:
var Building = Parse.Object.extend('Building')
store.findBuildings = () => {
var query = new Parse.Query(Building)
return query.find({
success: function (building) {
console.log('Succes:', building)
},
error: function (building, error) {
console.log('Error:', error.message)
}
})
}
store.reloadBuildings = (obj, prop) => {
store.findBuildings().then(buildings => {
console.log('BUILDINGS', buildings)
let buildings2 = _.map(buildings, (building) => building)
console.log('BUILDINGS 2', buildings2)
}, function (err) {
console.log('Error:', err)
})
}
如果我在console.log('BUILDINGS', buildings.toJSON())
中store.reloadBuildings
console.log
停止输出任何内容,则表示存在错误。但是,console.log('Error:', err)
也没有显示任何内容。
也许我以错误的方式编写错误处理?
修改
我也试过这个:
}).catch(err => {
console.log('Error:', err)
})
但我明白了:Uncaught TypeError: store.findBuildings(...).then(...).catch is not a function
答案 0 :(得分:2)
Parse SDK使用的承诺并不完全符合ES6承诺 - 可能是在标准最终确定之前(2015年6月)实施的。
他们的实现定义了.fail()
方法,而不是标准.catch()
。
}).fail(err => {
console.log('Error:', err)
})
在第一个代码段中,调用console.log('Error:', err)
的原因是因为回调绑定到来自store.findBuildings()
的承诺,该承诺已经解决,因此对其自身没有任何用处.fail()
回调。
var promise = store.findBuildings();
promise.then(success, failure);
要响应.then()
回调中引发的错误,您必须绑定到.then()
创建并返回的下一个Promise。抛出的错误将导致Promise被拒绝。
而且,这是您在编辑中尝试做的事情。
var promise = store.findBuildings();
promise.then(success).fail(failure);
// same as...
var promise2 = promise.then(success);
promise2.fail(failure);