尝试使用多个参数从API获取,直到第一次成功



所以我试图从api中获取数据,其中有可能与参数组合。这是我到目前为止完成的,但仍然停留在

// Given a string
const drinks = 'apple juice, orange juice, strawberry juice, water';
// Create an array of each drink
const drinkList = drinks.match(/[^,s][^,]*[^,s]*/g);
let urlParamList;
drinkList.forEach(drink => {
const splitDrinkStrings = drink.split(' ');
let name, fruit, urlParam;
if (splitDrinkStrings.length > 1) {
name = splitDrinkStrings[1]?.toLowerCase();
fruit = splitDrinkStrings[0]?.toLowerCase();
urlParam = `${name}/${fruit}`;
urlParamList.push(urlParam);
} else {
name = splitDrinkStrings[0]?.toLowerCase();
urlParam = name;
urlParamList.push(urlParam);
}
});
// urlParamList = ["juice/apple", "juice/orange", "juice/strawberry", "water"]
// so the fething would look like fetch(`https://myApi.com/api/${param}`) but need to try with each param from my urlParamList until there's a success. If there's no success just throw an error.

提前感谢!

这里有几个问题,所以。

第一个问题:

使用任意数量的单词而不仅仅是像下面这样的两个单词的最佳方法?

您可以简单地对数组进行join,因此:

splitDrinkStrings.reverse().join('/') // juice/apple or water or more/than/two/words

第二个问题

在此之后,使用每个参数从drinkList尝试从api (https://myApi.com/api/${urlParam})中获取,并在第一次成功时停止并抛出错误,如果没有什么?

您可以通过多种方式做到这一点,其中一种方法是在Array上使用some函数,如果它返回false,则抛出错误。完整代码:

const drinks = 'apple juice, orange juice, strawberry juice, water';
const found = drinks.split(', ').some(async drink => {
const splitDrinkStrings = drink.split(' ');
const urlParam = splitDrinkStrings.reverse().join('/');
try {
await fetch(`https://myApi.com/api/${urlParam}`);
return true;
} catch {
return false;
}
})
if(!found) throw new Error('boom');

相关内容

  • 没有找到相关文章

最新更新