2016-02-22 34 views
0

我有两个功能:一个是获取对象和另一种是分配这些对象一个对象的属性:为什么不是以下解析代码返回错误?

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.reloadBuildingsconsole.log S停止输出任何东西,这意味着发生了错误。但是,console.log('Error:', err)也不显示任何内容。

也许我以错误的方式写错误处理?

编辑:

我也试过这样:

}).catch(err => { 
    console.log('Error:', err) 
}) 

,但我得到:Uncaught TypeError: store.findBuildings(...).then(...).catch is not a function

+0

关于您的编辑:解析不使用基于ES6的承诺。他们使用自己的实现。它们不是'.catch()',而是['.fail()'](https://parse.com/docs/js/api/classes/Parse.Promise.html#methods_fail)。 –

+0

@Jonathan Lonowski哦,你说得对。你可以发布这个答案吗?奇怪的是,我从来没有听说过'fail()',我一直在使用ES6和Parse。 – alexchenco

回答

2

通过解析的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被拒绝。

而这正是您在编辑时所要做的。

var promise = store.findBuildings(); 

promise.then(success).fail(failure); 

// same as... 
var promise2 = promise.then(success); 
promise2.fail(failure); 
相关问题