猿问

javascript 异步获取函数

我正在尝试创建一个递归函数,它为给定数组的每个整数发送 PUT 请求,并在它的末尾调用另一个函数。


function fetchArchive(arr,state,mailbox){

  if(arr.length == 0){

    load_mailbox(mailbox)

  }

  for(i of arr){

    fetch(`/emails/${arr.shift()}`, {

      method: 'PUT',

      body: JSON.stringify({

          archived: state

      })

    })

    .then(fetchArchive(arr,state,mailbox))

  }

}

但它似乎load_mailbox()在获取数组的最后一项之前调用了该函数。

我知道这应该使用async / await. 有人可以举个例子来帮助我理解吗?


更新:事实证明下面的代码正在运行


async function fetchArchive(a,s,callback){

  for(i of a){

    await fetch(`/emails/${i}`, {

      method: 'PUT',

      body: JSON.stringify({

          archived: s

      })

    })

    // if i is the last item, load mailbox

    .then(() => { if(i==a[a.length-1] && callback) callback()});

  }

}


元芳怎么了
浏览 116回答 1
1回答

GCT1015

这是异步 for..of 循环的正确代码async function fetchArchive(arr,state,mailbox){    console.log(1)  if(arr.length === 0){    load_mailbox(mailbox)  }      for await (const elem of arr){    await fetch2(elem);        arr.shift();        console.log({ elem })    fetchArchive(arr,state,mailbox)  }}但是,此代码不起作用并导致无限递归 :) 我认为在迭代内改变数组是个坏主意。另外,请记住,then接收回调。因此,正确的论点then是:.then(response=>fetchArchive(respone))在你的情况下,你不能fetchArchive作为参数传递给then方法,因为fetchArchive不返回函数[更新]这是具有数组索引比较的工作代码:const fetchArchive = async (a, s, callback) => {  for (const [index, value] of a.entries()) {    await fetch(index)      // if i is the last item, load mailbox      .then(() => {        if (index == a.length - 1 && callback) {          callback();        }      });  }};关于你的文档entries可以在这里找到
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答