Javascript 允诺中的承诺
如何处理下一个承诺问题情况:我需要为每个人解决宠物、宠物解决后的开火事件以及所有人解决后的最后开火事件:Javascript 允诺中的承诺,javascript,asynchronous,promise,async-await,es6-promise,Javascript,Asynchronous,Promise,Async Await,Es6 Promise,如何处理下一个承诺问题情况:我需要为每个人解决宠物、宠物解决后的开火事件以及所有人解决后的最后开火事件: (async() => { const personsArr = await Promise.all(persons.map(async (person) => { await someSyncFunc(); const petsArr = await Promise.all(pets.map(async (pet) => {
(async() => {
const personsArr = await Promise.all(persons.map(async (person) => {
await someSyncFunc();
const petsArr = await Promise.all(pets.map(async (pet) => {
await asyncSetPetName(pet, person);
}));
Promise.resolve(petsArr)
.then(async () => someSyncFunc());
.then(() => console.log('pets resolved'));
}));
Promise.resolve(personsArr)
.then(async () => someSyncFunc());
.then(() => console.log('persons resolved'));
})();
问题首先是承诺。解决是人的责任。那是承诺。解决(arr)。然后(…)就没有任何意义了。不仅arr
已经是一个数组(不需要解析),而且在使用async
/wait
时也不应该使用then
:
(async() => {
const personsArr = await Promise.all(persons.map(async (person) => {
const petsArr = await Promise.all(pets.map(async (pet) => {
return asyncSetPetName(pet, person);
}));
console.log('pets resolved');
}));
console.log('persons resolved');
})();
那Promise.resolve(arr)。那么(…)
就没有任何意义了。不仅arr
已经是一个数组(不需要解析),而且在使用async
/wait
时也不应该使用then
:
(async() => {
const personsArr = await Promise.all(persons.map(async (person) => {
const petsArr = await Promise.all(pets.map(async (pet) => {
return asyncSetPetName(pet, person);
}));
console.log('pets resolved');
}));
console.log('persons resolved');
})();
你错过了第一次承诺前的等待。我的目标是射击控制台。更新所有人后记录('persons resolved'):每个人>更新他的宠物,更新他自己,最后的射击事件可能不是问题,但你错过了最后一次承诺后的返回call。你真的想用宠物和人的每一种组合调用
asyncSetPetName
吗?@TeodorKolev-TBH,你的问题并不完全清楚,因为你没有说你的预期输出是什么。正如@Bergi所说,您不需要所有额外的Promise.resolve().then()
链,对于pet
和person
的每一种可能组合,你显然调用asyncSetPetName
似乎有点奇怪。你错过了在第一次承诺之前等待
。我的目标是启动控制台。更新所有人员后记录('persons resolved'):对于每个人>更新他的宠物,更新person本身,在末尾触发事件可能不是问题所在,但您在最后的承诺.resolve()
调用中缺少了一个返回
。您真的想调用asyncSetPetName
来处理每个pet和person的组合吗?@TeodorKolev TBH,您的问题还不完全清楚,因为你还没有说你的预期产出是什么。正如@Bergi所说,您不需要所有额外的Promise.resolve().then()
链,而且对于pet
和person
的每个可能组合,您显然调用asyncSetPetName
似乎有点奇怪。外部persons.map()
调用中的箭头函数没有返回值,因此personsArr
将充满未定义的值。@Alnitak True。也许我应该完全删除变量声明,因为它们根本没有被使用。外部persons.map()
调用中的箭头函数没有返回值,因此personsArr
将充满未定义的值。@Alnitak True。也许我应该完全删除变量声明,因为它们根本不用。