当前位置: 首页 > 知识库问答 >
问题:

javascript - 确保先拿到上一个script 引入js get请求的结果,再走下一个js 文件中的内容,应该怎么修改呢?

谷永贞
2024-02-03

image.png
如图所示在html页面,通过script标签引入的publickKey文件
这里面需要发送get请求,请求服务器上一份加密key,然后在引入的其他js文件中使用
所以我需要确保 先拿到get请求的结果,再走下一个js 文件中的内容
publickKey.js 中用了 asynac await 但是还是先执行了下面的js 文件,导致没有拿到key ,
现在需要先拿到get请求的结果,再走下一个js 文件中的内容,应该怎么修改呢?

async function a(){    const res = await request}

共有2个答案

韩捷
2024-02-03

你应该先理解浏览器加载 JS 的机制,然后再设计你的逻辑。比如,使用 <script> 标签加载的话,如果没有 asyncdefer 那么它们就是顺序加载。而 Promise 不会影响下一个 JS 的加载和执行。

所以你的需求有两种做法:

  1. 在下一步的函数里验证开关,即 public key 是否已经加载
  2. 等待 public key 加载完毕,再加载后面的 JS
武元白
2024-02-03

要确保先拿到上一个 script 引入的 js get 请求的结果,再走下一个 js 文件中的内容,你可以使用 Promise 和 async/await 来实现。

首先,你需要将 get 请求封装成一个返回 Promise 的函数。这样,你可以在异步函数中使用 await 关键字来等待 get 请求完成。

下面是一个示例代码:

// 假设这是你的 get 请求函数function fetchPublicKey() {  return new Promise((resolve, reject) => {    // 在这里发送 get 请求,并处理响应    // 假设你的请求发送和响应处理逻辑是这样的:    fetch('https://example.com/publicKey')      .then(response => response.json())      .then(data => {        // 将获取到的数据解析为 publicKey        const publicKey = data.publicKey;        resolve(publicKey); // 解析成功后调用 resolve()      })      .catch(error => {        reject(error); // 请求失败时调用 reject()      });  });}

接下来,在需要使用 get 请求的异步函数中,你可以调用 fetchPublicKey() 函数并使用 await 关键字等待结果。

示例如下:

async function a() {  try {    const publicKey = await fetchPublicKey(); // 等待 get 请求完成并获取结果    // 在这里使用 publicKey,例如:    console.log(publicKey);  } catch (error) {    // 处理 get 请求失败的情况    console.error('Failed to fetch public key:', error);  }}

通过这种方式,你可以确保先获取到 get 请求的结果,然后再执行下一个 js 文件中的内容。

 类似资料:
  • 本文向大家介绍怎么引入(调用)一个JS文件,包括了怎么引入(调用)一个JS文件的使用技巧和注意事项,需要的朋友参考一下 我们旺旺需要调用别的 js文件。怎么处理? 看随机抽取这个例子。在一个页面中如下: 我们可以把 js 放在另外一个文件里,比如当前文件夹的 a.js 中。 这样 html 页面如下: a.js 这样就行了。 当然,也可以把 a.js放在web上,然后引用成下面这样。 以上所述是小

  • <script setup lang="ts">再引入1个<script src="..."></script>,报错,请问怎么解决? 错误提示: ERROR <script> cannot use the "src" attribute when <script setup> is also present because they must be processed together.

  • 本文向大家介绍怎么确保一个集合不能被修改?相关面试题,主要包含被问及怎么确保一个集合不能被修改?时的应答技巧和注意事项,需要的朋友参考一下 可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。 示

  • 写了一段 js 控制并发数的逻辑,已经实现了控制并发,但是我想在最下面的 for 循环中得到每个 task 执行后的 response。 目前只能得到最开始 5 个的,这是为什么? 目前的一个结果: 我知道可以用一个数组 or 对象存放批处理的结果,但是现在的场景需要单独处理每个 response Help,Thanks!

  • 我正在使用聚合管道。 这将产生以下结果: {"_id": ObjectId("512bc95fe835e68f199c8686"),"作者":"戴夫","分数": 80,"视图": 100} {"_id": ObjectId("512bc962e835e68f199c8687"),"作者":"戴夫","分数": 85,"意见": 521} 我想将这个管道结果(在本例中是一个数组)简化为一个对象。我

  • 我用python制作了一个指针类,只要将这个类作为第一个类继承,类型类作为第二个类继承,就可以实现有语法提示的指针,但现在有一个问题,我在实例化的时候用type函数重新生成了一个类,导致这个类的实例类型不等于这个类,我要怎么办? Pointer test.py 输出 <class 'Pointer.StrPointer'> <class 'Pointer.StrPointer'> False 我知