javascript - 如何传递 promise 数组而不调用它们?

标签 javascript promise axios es6-promise

我尝试将 axios 数组(作为 promise )传递给函数。当我调用该方法时,我需要执行这些 promise 。

const arrayOfAxios = [
  axios('https://api.github.com/')
]

setTimeout(() => {
  console.log('before call promise');

  Promise.all(arrayOfAxios).then(res => {

   console.log({ res });
  });

}, 5000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.js" integrity="sha256-bd8XIKzrtyJ1O5Sh3Xp3GiuMIzWC42ZekvrMMD4GxRg=" crossorigin="anonymous"></script>

在我的代码中,我可以立即看到https://api.github.com/。而不是当我调用 promise.all 时。

我做错了吗?还有另一种方法可以设置 promise 数组并稍后调用它们吗? (我的意思是 axios 示例)

最佳答案

Promise 不会运行任何东西,它们只是观察正在运行的东西。因此,并不是您不想调用 promise ,而是您不想启动他们正在观察的事情。当您调用 axios(或其他)时,它已经启动了它返回的 Promise 所观察到的进程。

如果您不想启动该进程,请不要调用axios(等等)。例如,您可以在数组中放置一个调用它的函数,然后在准备好开始工作时调用它:

const arrayOfAxios = [
  () => axios('https://api.github.com/') // *** A function we haven't called yet
];

setTimeout(() => {
  console.log('before call promise');

  Promise.all(arrayOfAxios.map(f => f())).then(res => {
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^ *** Calling the function(s)
   console.log({ res });
  });

}, 5000);

或者,如果您对数组中的所有条目执行相同的操作,请存储该操作所需的信息(例如 axios 的 URL 或选项对象):

const arrayOfAxios = [
  'https://api.github.com/' // *** Just the information needed for the call
];

setTimeout(() => {
  console.log('before call promise');

  Promise.all(arrayOfAxios.map(url => axios(url))).then(res => {
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^^^ *** Making the calls
   console.log({ res });
  });

}, 5000);

关于javascript - 如何传递 promise 数组而不调用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60666601/

相关文章:

javascript - 如何将图像数据响应转换为 Image base64?

javascript - 在正则表达式中使用变量 (jQuery)

javascript - 保留纵横比的响应式 iframe

javascript - 如何正确访问JSON数组?

javascript - 当回调采用多个参数时如何 promise 一个函数

javascript - 如何发送数据正确的axios Error : Multipart: Boundary not found

javascript - Chrome : JavaScript window. 打开可保存

node.js - Node Promises 如何进入 `nextTick` 和 `setImmediate` 之间?

javascript - Promise 不解析 node.js

javascript - React with Axios,对于我从一个 GET 得到的响应,我想使用另一个 GET,我想从某些字段中总结值