gpt4 book ai didi

javascript - 异步调用链,其中最后一个调用与第一个调用进行比较

转载 作者:行者123 更新时间:2023-12-02 21:28:58 25 4
gpt4 key购买 nike

我需要完成多个获取请求,其中每个请求都依赖于最后一个请求的成功完成。对于最终请求,我需要比较第一个请求的值。

这是我所得到的,它似乎有效,但我不确定我是否 100% 正确。

const getData = async ( id ) => {
return await fetch(`https://jsonplaceholder.typicode.com/todos/${id}`)
.then( json => json.json() )
.then( res => res )
}

const res_1 = await getData( 1 ).then( res => res )
const res_2 = await getData( res_1.id + 1 ).then( res => res )
const res_3 = await getData( res_2.id + 1 ).then( res => res )
const res_4 = await getData( res_3.id + 1 ).then( res => res )

console.log(`RES_1: \n${JSON.stringify(res_1)}`)
console.log(`RES_2: \n${JSON.stringify(res_2)}`)
console.log(`RES_3: \n${JSON.stringify(res_3)}`)
console.log(`RES_4: \n${JSON.stringify(res_4)}`)

if ( res_1.id !== res_4.id ) {
console.log("Id's don't match")
} else {
console.log("Id's match")
}

您可以忽略日志记录,它只是为了可视化正在发生的事情。

最佳答案

您不需要额外的 .then( res => res ) 因为它只是再次返回相同的对象。另外,当您使用 async/await 时,您可以删除 .then(...) 并仅对 promise 的结果进行 await 。此外,我们只能在 async 函数中使用 await,因此您可以将所有逻辑放入异步函数 fn 中,如下所示:

const getData = async(id) => {
const res = await fetch(`https://jsonplaceholder.typicode.com/todos/${id}`)
return res.json();
}

async function fn() {
const res_1 = await getData(1)
const res_2 = await getData(res_1.id + 1)
const res_3 = await getData(res_2.id + 1)
const res_4 = await getData(res_3.id + 1)

console.log('res_1.id: ', res_1.id);
console.log('res_4.id: ', res_4.id);

if (res_1.id !== res_4.id) {
console.log("Id's don't match")
} else {
console.log("Id's match")
}
}

fn();

或者,您也可以使用立即调用的异步函数表达式来实现此目的,例如:

const getData = async(id) => {
const res = await fetch(`https://jsonplaceholder.typicode.com/todos/${id}`)
return res.json();
}

(async function() {
const res_1 = await getData(1)
const res_2 = await getData(res_1.id + 1)
const res_3 = await getData(res_2.id + 1)
const res_4 = await getData(res_3.id + 1)

console.log('res_1.id: ', res_1.id);
console.log('res_4.id: ', res_4.id);

if (res_1.id !== res_4.id) {
console.log("Id's don't match")
} else {
console.log("Id's match")
}
}());

关于javascript - 异步调用链,其中最后一个调用与第一个调用进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60670148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com