好,所以我四处搜寻,没有发现与此问题有关的东西。
我的问题是这样的->
我使用从api获取的一些信息创建了一个对象(放入数组)。从api获取信息后,我需要调用另一个API以获得有关用户的更多信息。由于有多个用于用户的键,我希望能够通过一个简单的功能将它们内联设置。
我正在做这样的事情->
_item.push({
Author: setPeople(item.Author.Title),
Title: item.Title,
....
Requester: setPeople(item.Requester.Title
})
目前,我(完全)获得了诺言,而不是PromiseValue
。我知道您通常会执行类似setPeople(name).then(() => {})
的操作,但是该操作不适用于我的对象(将密钥设置得太快)。
关于我应该如何处理此问题的任何提示?
更新更多代码。
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不会帮助我,因为我仍然会收到未决的承诺或未定义的承诺。我必须使用的是->
Requester: await setPeople(item.Requester.Title).then((user) => { return user }),
在我的对象中使用它似乎可行,但是我的问题是……这种方法有多好?如果有很多此行为的字段(当前为5个),是否会使页面变慢...很多?
答案 0 :(得分:1)
然后您应该尝试类似的事情:
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);
}
});
}
异步/等待是一种使用异步Promise
函数的方法。 async
关键字告诉javascript编译器此函数将使用一个或多个异步函数。 await
关键字告诉编译器下一个函数调用是异步的,并返回一个Promise。
在您的代码中,您的第一个then()
函数应该返回一个诺言,而事实并非如此,这就是为什么无法达到第二个then()
的原因。
此外,在您的代码中,您的new Promise
不返回任何内容。创建新的Promise时,必须通过调用resolve()
或reject
结束它。
希望有帮助...