/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import Helper from '@ember/component/helper';
import { Promise } from 'rsvp';
export default class AwaitHelper extends Helper {
compute([promise]) {
if (!promise || typeof promise.then !== 'function') {
return promise;
}
if (promise !== this.lastPromise) {
this.lastPromise = promise;
this.value = null;
this.resolve(promise);
return this.value;
async resolve(promise) {
let value;
try {
value = await Promise.resolve(promise);
} catch (error) {
value = error;
} finally {
// ensure this promise is still the newest promise
// otherwise avoid firing recompute since a newer promise is in flight
if (promise === this.lastPromise) {
this.value = value;
this.recompute();