为什么以下Parse代码没有返回错误?

时间:2016-02-22 03:32:58

标签: javascript parse-platform ecmascript-6 parse-server

我有两个函数:一个用于获取对象,另一个用于将这些对象分配给对象的属性:

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

1 个答案:

答案 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);