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。也许我应该完全删除变量声明,因为它们根本不用。