Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用Axios向所有人承诺_Javascript_Promise_Axios - Fatal编程技术网

Javascript 用Axios向所有人承诺

Javascript 用Axios向所有人承诺,javascript,promise,axios,Javascript,Promise,Axios,我刚刚读了一篇有关promise的文章,无法理解如何通过promise使用Axios进行多API调用 请考虑有3个URL,我们称之为“< /P>”。 let URL1 = "https://www.something.com" let URL2 = "https://www.something1.com" let URL3 = "https://www.something2.com" 和一个数组,我们将在其中存储值 let promiseArray = [] 现在,我想并行运行这个(Pr

我刚刚读了一篇有关promise的文章,无法理解如何通过promise使用Axios进行多API调用

请考虑有3个URL,我们称之为“< /P>”。
let URL1 = "https://www.something.com"
let URL2 = "https://www.something1.com"
let URL3 = "https://www.something2.com"
和一个数组,我们将在其中存储值

  let promiseArray = []
现在,我想并行运行这个(
Promise.all
),但我不知道我们将如何做?因为axios本身就有一个承诺(或者至少我是这样使用它的)


问题:有人能告诉我,我们如何使用promise.all和axios发送多个请求吗

const axios = require('axios');
function makeRequestsFromArray(arr) {
    let index = 0;
    function request() {
        return axios.get('http://localhost:3000/api/' + index).then(() => {
            index++;
            if (index >= arr.length) {
                return 'done'
            }
            return request();
        });

    }
    return request();
}

makeRequestsFromArray([0, 1, 2]);

您仍然可以使用
promise.all
和传递给它的承诺数组,然后等待所有承诺得到解决或其中一个被拒绝

让URL1=”https://www.something.com";
让URL2=”https://www.something1.com";
让URL3=”https://www.something2.com";
const fetchURL=(url)=>axios.get(url);
常量promiseArray=[URL1,URL2,URL3].map(fetchURL);
承诺。全部(承诺)
。然后((数据)=>{
数据[0];//已解析第一个承诺
数据[1];//已解析第二个承诺
})
.catch((错误)=>{
});
fetchData(URL)
函数发出网络请求并返回状态为pending的promise对象

承诺。所有
将等待所有承诺得到解决或任何承诺被拒绝。它返回一个带有响应数组的承诺和解析

let randomPromise = Promise.resolve(200);
axios.all([
    axios.get('http://some_url'),
    axios.get('http://another_url'),
    randomPromise
  ])
  .then((responses)=>{
    console.log(responses)
  })
let url=[”https://jsonplaceholder.typicode.com/posts/1", "https://jsonplaceholder.typicode.com/posts/2", "https://jsonplaceholder.typicode.com/posts/3"]
函数getAllData(URL){
返回Promise.all(url.map(fetchData));
}
函数获取数据(URL){
返回轴
.get(URL)
.然后(功能(响应){
返回{
成功:没错,
数据:response.data
};
})
.catch(函数(错误){
返回{success:false};
});
}
getAllData(URL).then(resp=>{console.log(resp)}).catch(e=>{console.log(e)})
axios.get()方法将返回承诺

Promise.all()
需要承诺数组。例如:

Promise.all([promise1, promise2, promise3])
那么

let URL1 = "https://www.something.com"
let URL2 = "https://www.something1.com"
let URL3 = "https://www.something2.com"

const promise1 = axios.get(URL1);
const promise2 = axios.get(URL2);
const promise3 = axios.get(URL3);

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});
您可能想知道
Promise.all()
的响应值是什么样子的。那么,通过快速查看以下示例,您可以很容易地找到答案:

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});
// expected output: Array [3, 42, "foo"]

欲了解更多信息:

仅添加到已批准的答案中,axios还有其承诺。所有承诺都以
axios的形式出现。所有承诺都需要承诺列表,并返回一系列响应

let randomPromise = Promise.resolve(200);
axios.all([
    axios.get('http://some_url'),
    axios.get('http://another_url'),
    randomPromise
  ])
  .then((responses)=>{
    console.log(responses)
  })
希望这能有所帮助

var axios = require('axios');
var url1 = axios.get('https://www.something.com').then(function(response){
    console.log(response.data)
  })
var url2 = axios.get('https://www.something2.com').then(function(response){
    console.log(response.data)
  })
var url3 = axios.get('https://www.something3.com').then(function(response){
    console.log(response.data)
  })

Promise.all([url1, url2, url3]).then(function(values){
  return values
}).catch(function(err){
  console.log(err);
})

对代码的解释将有助于获得更好的答案似乎与您的问题相似接受的答案中有类似的代码(没有
然后
之后
axios.get
catch
块)同意@barbsan单独解决每个承诺不是正确的处理方式。all有效地将一组未解决的承诺捆绑成一个单独的未解决的承诺,该承诺将解决一系列结果。接受的答案是正确的。如何在其中添加身份验证标题?请查看此
axios。文档在momentaxios时不推荐使用所有
。2017年删除所有内容,改用Promise.all。你可能想补充一点,即使一个失败了,一切都失败了。