With the following example using async/await, I would to convert it in explicit Promise:
conts promises = [promise1, promise2, promise3, promise4]
async function (message) 
{
  let transformedMessage = message
  for(let p of promises) 
  {
      transformedMessage = await p(transformedMessage)
  }
  return transformedMessage
}
I didn't find any collection which permits to reuse the resolve value as argument of the following iteration.
 
    