Javascript 解析承诺并存储要在多个其他JS函数中使用的值

Javascript 解析承诺并存储要在多个其他JS函数中使用的值,javascript,promise,async-await,Javascript,Promise,Async Await,我正在导入一个包,其中包含一些函数,这些函数返回我请求的凭据的承诺。密钥在多个文件中使用-因此我认为我在一个文件中解析承诺,然后将值导出到所有其他依赖文件 正在获取凭据文件:getEmailKey.js import {getKey} from '@secret.pkg' export default class KeysService { constructor() { this.emailKey = null; } get emailKey () { retur

我正在导入一个包,其中包含一些函数,这些函数返回我请求的凭据的承诺。密钥在多个文件中使用-因此我认为我在一个文件中解析承诺,然后将值导出到所有其他依赖文件

正在获取凭据文件:getEmailKey.js

import {getKey} from '@secret.pkg'
export default class KeysService {
  constructor() {
    this.emailKey = null;
  }

  get emailKey () {
    return this.emailKey || this.fetchEmailKey();
  }

  async fetchEmailKey() {
    const key = await getKey;
    this.emailKey = key;
  }
使用键:helperFunctions.js

import KeysService from './getEmailKey.js';
export function createEmailLink() {
  return `${BASE_URL}?key=${KeysService.emailKey}`
}

使用这种方法,第一次调用keyservice.emailKey时,它将调用this.fetchEmailKey(),但由于this.emailKey尚未设置,因此不会返回任何内容。有没有另一种方法,我不需要包装每个需要密钥的函数来解决承诺问题?

每个潜在的使用者都必须支持异步性-这是没有办法的。解决这一问题的通常方法是执行类似于
this.promiseKey=getKey()的操作
然后任何需要钥匙的人都可以使用这个.promiseKey。然后(…)。你在逃避诺言。然后,每段需要密钥的代码都以相同的方式获得密钥,无论它们是第一个请求密钥还是最后一个请求密钥。任何在承诺已解决后请求它的人都将立即在其
.then()
处理程序中获得该值,而无需等待,但调用代码不必关心任何一种方式。如果您考虑一下这是什么,
将返回this.emailKey | this.fetchEmailKey()
-它返回
this.emailKey
中的值或
fetchEmailKey()
-返回的承诺(注意:返回的承诺将解析为
未定义的承诺)
-因此,您将返回一个值或一个承诺-您可以返回两个不同的东西,这一事实应该会让您大吃一惊:pOr,作为初始化的一部分,您可以获取一次密钥,并且在您必须设置密钥之前,不会完成初始化任何内容,以便在任何代码请求之前,可以缓存并提供给可能请求该密钥的任何人。