When you want each remapped value resolved before moving on to the next, you can process the array as an asynchronous iterable.
Below, we use library iter-ops, to remap each value into promise, and then produce an object with resolved value, because map itself shouldn't be handling any promises internally.
import {pipe, map, wait, toAsync} from 'iter-ops';
const i = pipe(
    toAsync(myArray), // make asynchronous
    map(myValue => {
        return service.getByValue(myValue).then(a => ({id: 'my_id', myValue: a}))
    }),
    wait() // wait for each promise
);
(async function() {
    for await (const a of i) {
        console.log(a); // print resulting objects
    }
})
After each value, we use wait to resolve each remapped value as it is generated, to keep resolution requirement consistent with the original question.
     
    
asyncand the innerawaitcan't affect the outer function.async/awaitis part of ES2017 (this year's release), not ES7 (last year's release).