Решение этого оказалось немного отличным от предыдущих ответов. Я думал, что напишу, как я заставил это работать в конце. Ответы от @phil и @vaelin действительно помогли мне в этом разобраться.
Вот и было мое решение ...
class IDManager {
async fetchID (resolve,reject ) {
const response = await fetch( URL, { } ) ;
const id = await response.json() ;
resolve( id );
}
async getID() {
if ( this.id === undefined ) {
if ( this.promise === undefined ) {
var self = this;
this.promise = new Promise( this.fetchID ).then( function(id) { self.id = id;} );
}
await this.promise;
}
return this.id;
}
}
Проблема заключалась в том, что в ожидании выборки вызов getID выполнял пару секунд. В течение этого времени часто было несколько вызовов getID, каждый из которых инициировал другую выборку. Я избежал этого, заключив вызовы fetch и response. json в другое обещание, которое было создано мгновенно, и, таким образом, избежал дублирования.