获取多个承诺,仅返回一个

扬哈特曼

我有一个要获取的网址列表。所有这些url返回一个带有属性的json对象valid但是,只有在获取承诺的一个具有神奇的valid属性true

我尝试了url.forEach(...)和的各种组合Promises.all([urls]).then(...)目前,我的设置是:

const urls = [
    'https://testurl.com', 
    'https://anotherurl.com', 
    'https://athirdurl.com' // This is the valid one
];

export function validate(key) {
    var result;
    urls.forEach(function (url) {
        result = fetch(`${url}/${key}/validate`)
            .then((response) => response.json())
            .then((json) => {
                if (json.license.valid) {
                    return json;
                } else {
                   Promise.reject(json);
                }
            });
    });

    return result;
}

由于异步承诺,上述方法不起作用。当第一个valid == true被点击时,我该如何迭代我的网址并返回

杰罗曼达X

让我把一个不错的紧凑型词条混入

它使用Promise.all,但是每个内部Promise都会捕获任何错误并false在这种情况下简单地解决,因此Promise.all将永远不会拒绝-任何已完成但没有license.valid的提取都将解析为false

进一步处理数组Promise.all resolves,过滤出false值,然后返回第一个(从问题描述中应该是唯一的)有效JSON响应

const urls = [
    'https://testurl.com', 
    'https://anotherurl.com', 
    'https://athirdurl.com' // This is the valid one
];

export function validate(key) {
    return Promise.all(urls.map(url => 
        fetch(`${url}/${key}/validate`)
        .then(response => response.json())
        .then(json => json.license && json.license.valid && json)
        .catch(error => false)
    ))
    .then(results => results.filter(result => !!result)[0] || Promise.reject('no matches found'));
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

返回多个值,包括一个承诺

来自分类Dev

一个承诺触发零个或多个承诺

来自分类Dev

AngularJS:从.then内部返回一个承诺?

来自分类Dev

从服务中返回一个承诺

来自分类Dev

异步函数返回一个承诺

来自分类Dev

从承诺的 then() 返回一个值?

来自分类Dev

仅获取多个事件中的第一个

来自分类Dev

如何仅处理多个并行承诺中最后创建的一个?

来自分类Dev

从承诺中返回另一个承诺

来自分类Dev

一个对多个承诺的承诺-并发问题

来自分类Dev

云HTTPS功能:返回一个承诺这是一个承诺人内

来自分类Dev

SQL查询仅返回一个条目,而应返回多个条目

来自分类Dev

仅返回一个对象JSON而不返回多个对象PHP?

来自分类Dev

承诺,我在获取另一个函数的返回时遇到了一些麻烦

来自分类Dev

Foreach仅返回一个输出

来自分类Dev

Mysqli循环,仅返回一个

来自分类Dev

Foreach仅返回一个输出

来自分类Dev

数组仅返回一个元素

来自分类Dev

抓取仅返回一个值

来自分类Dev

多个等待操作或仅一个

来自分类Dev

从多个拉动,仅推到一个

来自分类Dev

函数返回一个承诺,检查错误

来自分类Dev

这是为什么仍然返回一个承诺?

来自分类Dev

await AsyncStorage 返回一个承诺而不是值

来自分类Dev

将返回 foo 的承诺映射到另一个返回 bar 的承诺?

来自分类Dev

为什么document.getElementById仅返回多个项目数组中的一个项目?

来自分类Dev

需要读取多个节点的值:ORA-19025:EXTRACTVALUE仅返回一个节点的值

来自分类Dev

Mysql子查询仅返回一个结果,即使列表中有多个ID

来自分类Dev

JavaScript [Konva]:数组多个事件仅返回最后一个对象

Related 相关文章

热门标签

归档