Не могу сообразить: можно ли написать это проще?
Promise.resolve()
.then(@getObjectDescription.bind(@))
.then(
(someObject) =>
new Promise (resolve, reject) =>
Promise.resolve()
.then(@getSomeSpecialFieldValue.bind(@))
.then(
(value) ->
someObject.special_field = value
)
.then(resolve.bind(null, someObject))
.catch(reject)
)
.then(
(someObject) ->
data = new FormData()
data.append('field', someObject.field)
data.append('special_field', someObject.special_field)
options =
method: 'post'
body: data
return options
)
.then(@execute.bind(@, 'rest.api.method'))
Суть в том, что getObjectDescription() в какой-то момент резолвит объект. Потом нужно заполнить у этого объекта одно поле особым образом через асинхронный запрос значения. А потом нужно с этим же объектом работать дальше.
И вот эта функция, вызываемая после изначального получения объекта, мне не очень нравится тем, что необходимо создавать вложенный promise.
P.S. Для тех, кто не знаком с CoffeeScript: @ - это this. Остальное должно быть интуитивно понятно.