我有一个包含用于获取github用户的简单api url的promise数组。我尝试通过在数组的其中一个值中输入错误的url来使其失败,但是它始终可以解决?
在这里,我提供了我的测试用例的链接 https://jsbin.com/lapibalate/edit?js,console
let urlMap = [
{
url: 'https://api.github.com/users/andreepratama27',
},
{
url: 'https://apiiiiiii.github.com/users/rizalfakhri12'
}
]
let promises = urlMap.map(v => fetch(v))
Promise.all(promises)
.then(res => console.log('RESOLVED'))
.catch(err => console.log("REJECTED"))
答案 0 :(得分:3)
这是因为您不是对指定的URL进行访存,而是对当前URL上的[object Object]
进行访存(因为v
属性是一个对象,而不是字符串)。更改地图以读取url
属性,它将被拒绝:
let promises = urlMap.map(v => fetch(v.url))
具有更改的完整示例:
let urlMap = [
{
url: 'https://api.github.com/users/andreepratama27',
},
{
url: 'https://apiiiiiii.github.com/users/rizalfakhri12'
}
]
let promises = urlMap.map(v => fetch(v.url))
Promise.all(promises)
.then(res => console.log('RESOLVED'))
.catch(err => console.log("REJECTED"))
答案 1 :(得分:2)
提取规范与jQuery.ajax()的主要区别在于两个方面:
从fetch()返回的Promise不会因HTTP错误状态而拒绝 即使响应是HTTP 404或500,它也会解析 通常(将ok状态设置为false),并且只会在 网络故障或是否有任何阻止请求完成的事情。
那就是为什么。