2016-02-22 3 views
0

У меня есть две функции: один, который извлекает объекты, а другой, который присваивает эти объекты в собственность объекта:Почему следующий код Parse не возвращает ошибку?

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) ничего не отображает.

Возможно, я написал ошибку обработки неправильно?

EDIT:

Я также попытался это:

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

Но я получаю: Uncaught TypeError: store.findBuildings(...).then(...).catch is not a function

+0

Относительно вашего редактирования: Parse не использует Promise на основе ES6. Они используют свою собственную реализацию. Вместо '.catch()' они имеют ['.fail()'] (https://parse.com/docs/js/api/classes/Parse.Promise.html#methods_fail). –

+0

@ Джонатан Лоновски О, ты прав. Не могли бы вы опубликовать это как ответ? Странно, я никогда не слышал о «fail()», и я довольно долго использовал ES6 и Parse. – alexchenco

ответ

2

Обещания, используемое SDK PARSE является не полностью соответствует ES6 Обещанию - вероятно, они были выполнены до того, как стандарт был доработан (июнь 2015 года).

Их реализация определяет метод .fail() вместо стандартного .catch().

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

В первом фрагменте, причина console.log('Error:', err) не вызывается потому, что обратный вызов связан с Promise от store.findBuildings(), который был решен, и поэтому не имеет никакой пользы для любого из своих собственных .fail() обратных вызовов.

var promise = store.findBuildings(); 

promise.then(success, failure); 

Чтобы ответить на ошибки, возникающие в .then() обратного вызова, вам придется привязать к следующему Promise, созданного и возвращенного .then(). Выброшенная ошибка приведет к тому, что Promise будет отклонено.

И это то, что вы пытались сделать в своем редактировании.

var promise = store.findBuildings(); 

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

// same as... 
var promise2 = promise.then(success); 
promise2.fail(failure); 
Смежные вопросы