gpt4 book ai didi

javascript - 创建对象时返回PromiseValue

转载 作者:行者123 更新时间:2023-12-03 00:30:58 27 4
gpt4 key购买 nike

好的,所以我四处搜索,没有发现与此问题相关的任何内容。

我的问题是这样的 ->

我使用从 api 获取的一些信息创建一个对象(插入数组)。从 API 获取信息后,我需要调用另一个 API 来获取有关用户的更多信息。由于用户有多个键,我希望能够通过一个简单的函数将它们设置为内联。

我正在做这样的事情 ->

_item.push({
Author: setPeople(item.Author.Title),
Title: item.Title,
....
Requester: setPeople(item.Requester.Title
})

目前我得到的是 promise 集(全部),而不是PromiseValue。我知道您通常会执行类似 setPeople(name).then(() => {}) 的操作,但这在我的对象中不起作用(设置 key 太快)。

关于我应该如何解决这个问题有什么建议吗?

使用更多代码进行更新。

export const retrieveIrfItems = async (spId) => {
let spQuery = "SITE" + SpQueryExtend1 + spQueryExpand;

return new Promise((resolve, reject) => {
let _items = [];
axiosApi.get(SiteUrl + spQuery).then((response) => {
//console.log(response.data.d);
return response.data.d;
}).then(async (item) => {
//let requesterSP = setPeople()
const createSPUser = async (user) => {
let spUser;
console.log("User prop is");
console.log(user);
setPeople(user).then((item) => {
spUser = item;
});
return spUser;
}

_item.push({
Author: setPeople(item.Author.Title),
Title: item.Title,
....
Requester: setPeople(item.Requester.Title
})

忽略未使用的功能,我仍在进行测试以找到解决此问题的方法。

感谢评论,找到了修复程序。

使用 async/await 对我没有帮助,因为我仍然会收到待处理或未定义的 promise 。我必须使用的是 ->

请求者:await setPeople(item.Requester.Title).then((user) => { return user }),
在我的对象中使用它似乎可行,但我的问题是......这种方法有多好?如果有很多字段具有这种行为(当前为 5 个),那么页面速度是否会减慢...很多?

最佳答案

那么你应该尝试这样的事情:

export const retrieveIrfItems = async (spId) => {
return new Promise((resolve, reject) => {
let spQuery = "SITE" + SpQueryExtend1 + spQueryExpand;
let _items = [];
try{
const axiosApiItem = await axiosApi.get(SiteUrl + spQuery);
const item = axiosApiItem.data.d;
_item.push({
Author: await setPeople(item.Author.Title),
Title: item.Title,
...
Requester: await setPeople(item.Requester.Title)
});
return resolve(_items);
}catch(e){
return reject(e);
}
});
}

Async/await 是一种使用异步Promise 函数的方法。 async 关键字告诉 javascript 编译器该函数将使用一个或多个异步函数。 await 关键字告诉编译器下一个函数调用是异步的并返回一个 promise 。

在您的代码中,您的第一个 then() 函数应该返回一个 promise ,但事实并非如此,这就是无法访问第二个 then() 的原因。

此外,在您的代码中,您的 new Promise 不会返回任何内容。当你创建一个新的 Promise 时,你必须通过调用 resolve()reject 来结束它。

希望对你有帮助...

关于javascript - 创建对象时返回PromiseValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870968/

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