Если test
- это обещание, то if (test)
- неправильный способ с ним справиться.Более того, вам не следует создавать new Promise
, когда addTodo
уже предоставляет обещание.
Все, что вам нужно, это:
todoService.addTodo(description).then(function(result) {
console.log(result);
}, function(err) {
alert(err);
});
Теперь, когда вы также добавили реализациюaddToDo
в вашем вопросе выясняется, что ему не хватает return
обещания, которое вы создаете там, поэтому он просто вернул undefined
, что, очевидно, не является обещанием.Добавьте return
здесь:
addTodo: function (description) {
serv.todoUrl ='http://localhost:8080/add?description=' + description;
serv.todoResource = $resource(serv.todoUrl);
return serv.todoResource.save().$promise.then(function (data) {
// ^^^^^
console.log(data);
let toReturn = {result: data.result, details: data.details};
console.log(toReturn);
return toReturn;
}, function (error) {
return null;
});
Обратите внимание, что другие операторы return
находятся в относительных функциях обратного вызова, которые выполняются асинхронно, поэтому они не предоставляют возвращаемое значение для addToDo
, но они предоставляютразрешающее значение для обещания.
Примечание: поскольку вы обрабатываете случай отклонения в addToDo
и не каскадируете ошибку, а просто возвращаете null
, addToDo
не будет представлять отклоненное обещание вэто дело, но уже выполненное.Если вы предпочитаете, чтобы в этом случае получатель отклонял обещание addToDo
, просто удалите функцию обработчика отклонения из addToDo
.