Вы ничего не возвращаете изнутри new Promise
. Все, что вы возвращаете, просто выбрасывается. Что вы делаете, так это решаете и отвергаете. Если вы хотите «вернуть» что-то, включая другое обещание, вам нужно разрешить это что-то.
Итак, что вы хотите, это
new Promise((resolve, reject) => {
//function call with returned promise...
resolve(new Promise((resolve, reject) => {
^^^^^^^
reject("rejectCall_2")
}));
}).catch(e1 => {
console.log('e1', e1)
})
Протестировано с помощью babel-node.
FWIW, вы могли бы также использовать формат жирной стрелки с немедленным возвратом и сэкономить несколько фигурных скобок:
new Promise((resolve, reject) =>
resolve(new Promise((resolve, reject) =>
reject("rejectCall_2")
));
).catch( e1 => console.log('e1',e1));
Я хотел бы принять к сведению комментарии, в которых предполагается, что вы можете быть виновны в «анти-шаблоне явного конструктора обещаний», когда вы создаете обещание только для того, чтобы разрешить или отклонить его с помощью какого-то другого обещания, которое вы могли только что использовать в первую очередь. Я предполагаю, что ваш пример является искусственным, предназначенным для демонстрации вашей конкретной проблемы.
person
Community
schedule
09.07.2015
reject(new Error('rejectCall_2'));
- person Florian Margaine   schedule 09.07.2015foo.bar()
, который возвращает обещание, вы можете простоfoo.bar().catch(e => ...)
. - person ssube   schedule 09.07.2015new Promise
. - person Bergi   schedule 09.07.2015