如何使用异步GM_xmlhttpRequest以原始顺序返回值?

Nurarihyon

我正在尝试制作Tampermonkey脚本来更新某些网站上的日期。我从网站上获得了一个ID数组,并且正在使用ID来请求数据。之后,我必须返回每个Input的数据。

由于该函数是async,它以随机顺序返回数据,但是我需要那些新数组以原始顺序返回。我已经尝试过sync和Promises,但是第一个太慢了,我还不了解第二个。

我可以对id进行排序,但我也得到的日期与第一个数组的顺序相同,因此我不知道如何实现与第二个id数组相同的顺序。

这是代码:

id = GM_getValue('id');

for (let i = 0; i < id.length; i++) {
  setTimeout(() => {
      console.log("Updating " + (i + 1) + " Title");

      GM_xmlhttpRequest({
          method: "GET",
          url: "***" + id[i] + "/***",
          onload: function(response) {
            $(response.responseText).find("#main-form :input").each(function(x) {
                if (x == 0) ids.push(parseInt($(this).val()));
                if (x == 1) array.push($(this).val()));
            });
        }
      });
  }, i * 333);
}
双重提示

您可以使用Promises以GET特定顺序执行请求。这是一个例子:

id = GM_getValue('id');

function makeGetRequest(url) {
  return new Promise((resolve, reject) => {
    GM_xmlhttpRequest({
      method: "GET",
      url: url,
      onload: function(response) {
        resolve(response.responseText);
      },
      onerror: function(error) {
        reject(error);
      }
    });
  });
}

for (let i = 0; i < id.length; i++) {
  console.log("Updating " + (i + 1) + " Title");
  try {
    const response = await makeGetRequest("***" + id[i] + "/***");
    $(response).find("#main-form :input").each(function(x) {
      if (x == 0) ids.push(parseInt($(this).val()));
      if (x == 1) array.push($(this).val());
    });
  } catch (error) { // in case the GET request fails
    console.error("Request failed with error code", error.status, ". Message is ", error.responseText);
  }
}

在此示例中,我创建了一个makeGetRequest()带有返回promise函数,函数在GET成功时得到解决,但在失败时被拒绝

await等待Promise结算,然后继续操作,并且try存在以捕获Promise拒绝(如果GET失败)。

参考文献:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过GM_xmlhttpRequest发送布尔值?

来自分类Dev

异步等待如何使用返回值

来自分类Dev

如何使用异步方法遍历数组,并按正确的顺序将返回值放入数组

来自分类Dev

如何使用GM_xmlhttpRequest提交到基本的外部表单页面?

来自分类Dev

使用GM_xmlhttpRequest交换访问令牌的Quire授权代码

来自分类Dev

使用Jasmine,如何测试异步调用的返回值?

来自分类Dev

如何使用异步任务的返回值执行方法?

来自分类Dev

如何获得异步方法的返回值?

来自分类Dev

如何从异步函数返回值

来自分类Dev

异步函数未按正确顺序返回值

来自分类Dev

使用Caolan的异步模块返回值

来自分类Dev

使用异步等待不返回值

来自分类Dev

使用异步命令从函数返回值

来自分类Dev

GM_xmlhttpRequest中断脚本

来自分类Dev

如何使用异步方法将异步方法的返回值传递到同步类中

来自分类Dev

使用异步库从异步函数获取返回值

来自分类Dev

如何获取返回承诺的异步函数的返回值

来自分类Dev

如何获取返回承诺的异步函数的返回值

来自分类Dev

从异步函数返回值

来自分类Dev

从异步线程返回值

来自分类Dev

从NodeJS异步返回值

来自分类Dev

从异步函数返回值

来自分类Dev

从异步函数返回值

来自分类Dev

SWIG:如何根据原始返回值对返回值进行类型映射?

来自分类Dev

如何使用异步Http客户端loopj返回值

来自分类Dev

如何使用异步方法将非同步方法的返回值传递到同步类中

来自分类Dev

如何使用异步和等待从订阅 API 调用中获取返回值

来自分类Dev

使用 Scrapy 时如何将返回值按特定顺序排列?

来自分类Dev

如何从两个异步方法返回值?

Related 相关文章

热门标签

归档