я пытаюсь добавить URL-адрес плаката в мою базу данных neo4j mov ie, используя js, но постоянно получаю эту неопределенную ошибку объекта - PullRequest
0 голосов
/ 09 января 2020

Я совершенно новичок в JS и с трудом пытаюсь понять асинхронные вызовы. Нужно ли мне вложить еще один объект обещания, чтобы установить URL-адреса плакатов? я действительно в замешательстве

async function getIds() {
    const result = await session.run("MATCH (m :Movie) RETURN m.imdbId LIMIT 5");
    const ids = [];
    result.records.forEach(record => ids.push(record._fields[0]));
    return ids;
}

async function imdbIds() {
    const ids = await getIds();
    console.log(ids);
    const response = await Promise.all(ids.map(async id => {
        // webscrapper that returns poster url of each imdbid
        const url = toString(scrapper(id));
        console.log(url);

        // query to set poster of each id in neo4j db
        const result = await session.run("MATCH (m :Movie {imdbId : $id}) SET m.poster = $url RETURN m.poster", { id, url });
        result.records.forEach(record => console.log(record._fields[0]));
        return result;
    }));
    console.log(response);
}

imdbIds();

консольные журналы все равно не повезло

Ответы [ 2 ]

1 голос
/ 09 января 2020

Проблема в вашей getIds функции. вы завернули функцию возврата обещания в другое обещание. Вторая проблема - ваша функция getIds. вы делаете асинхронную операцию в forEach, которая не будет работать. Замените его на Promise.all должно быть так

async function getIds() {
  const result = await session.run("MATCH (m :Movie) RETURN m.imdbId LIMIT 5");
  const ids = [];
  result.records.forEach(record => ids.push(record._fields[0]));
  return ids;
}

async function imdbIds() {
  const ids = await getIds();
  console.log(ids);
  const response = await Promise.all(ids.map(async id => {
    // webscrapper that returns poster url of each imdbid
    const url = toString(scrapper(id));
    console.log(url);

    // query to set poster of each id in neo4j db
    const result = await session.run("MATCH (m :Movie {imdbId : $id}) SET m.poster = $url RETURN m.poster", {id, url});
    result.records.forEach(record => console.log(record._fields[0]));
    return result;
  }));
  console.log(response);
}
0 голосов
/ 09 января 2020

понял, спасибо за помощь, мистер. аши sh моди

async function setPosters() {
    const result = await session.run("MATCH (m :Movie) RETURN m.imdbId LIMIT 15");
    result.records.forEach(async record => {
        const imdbId = record._fields[0];
        const url = await scraper(imdbId);
        await session.run("MATCH (m :Movie {imdbId : $imdbId}) SET m.poster = $url RETURN m.poster", { imdbId, url });
    });
}

setPosters();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...