Puppteer: waitForResponse возвращает объект запроса при false в callback обработчике

Имеется авторизация на сайте, перед нажатием кнопки создаю promise с waitForResponse на ожидание запроса с ошибкой (если она будет) и ожидаю его решения или решения promise с waitFornavigation:

let waitPasswordError = page.waitForResponse(async (response) => {
    console.log(response.request().url())
    if(response.request().url().includes('login.do') && response.status() === 200) {
        const {content: {data}} = await response.json();

        if(data){
            let result = data.titleMsg !== undefined;
            console.log('Error:', result);
            return result;
        }

    } else return false;
});
let waitLoginRedirect = page.waitForNavigation( {timeout: 0, 'waitUntil' : 'networkidle0' } );
await page.click('#signin');
await Promise.any([waitLoginRedirect, waitPasswordError])...

Promise waitPasswordError должен решится при условии что url содержит login.do, запрос получил статус 200, а объект ответа полученного с response.json(), в свойстве data содержит поле titleMsg. и не смотря на то, что console.log('Error:', result); пишет в консоль Error: false, Promise возвращает объект запроса на login.do,при этом если вывести его в консоль то видно что он естественно не содержит требуемого поля:


{
  content: {
    data: {
      loginResult: 'success',
      loginSucResultAction: 'loginResult',
      loginType: 'pwd',
      loginScene: 'normal',
      resultCode: 100,
    },
    status: 0,
    success: true
  },
  hasError: false
}

Ответы (1 шт):

Автор решения: vsemozhebuty

Mожет быть так, что у вас устаревшая версия puppteer. Поддержка колбеков этого метода, возвращающих промисы, была добавлена недавно, до этого промисы воспринимались как truthy-значения.

См. issue и PR — т.е. нужна как минимум версия 6.0.0.

→ Ссылка