Назови же обещание внутри себя - PullRequest
0 голосов
/ 03 мая 2018

Все еще пытаюсь обернуть мою голову обещаниями и тем, как они работают. Я запрашиваю API для веб-мастеров Google, чтобы получить данные Search Analytics. Я настроил обещание, которое возвращает данные, если я вызову их один раз, однако мне нужно вызвать их снова, основываясь на результатах предыдущего.

Например:

startRow = 0;
data = [];

Query(startRow).then((results) => {
  if (results != null) {
    data.push(results)
    startRow++;
    // RUN SAME QUERY AGAIN
  };
});

startRow нужно увеличить на 1, затем вызвать то же обещание (с обновленным startRow), если обещание вернуло данные. Это возможно, или я смотрю на это совершенно неправильно?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Что вы можете сделать, это создать функцию, которая рекурсивно возвращает все результаты с определенной страницы и затем вызывать ее с начальным значением страницы 0:

function queryPaged(pageNum, soFar) {
    return Query(pageNum).then(function (results) {
        return results
            ? queryPaged(pageNum + 1, soFar.concat(results))
            : soFar;
    });
}

queryPaged(0, []).then(function (allResults) {
    console.log(allResults);
});
0 голосов
/ 03 мая 2018

Вы не можете вызывать одно и то же обещание более одного раза, только создавайте новые.

startRow = 0;
data = [];

function startQuery() {
    // Generally a good idea to always return Promises,
    // so you can chain them if needed
    return Query(startRow).then(processResults);
}

function processResults(results) {
    if (results == null) return;

    data.push(results);
    startRow++;
    return startQuery();
};

startQuery();

Или, более компактно:

startRow = 0;
data = [];

function startQuery() {
    return Query(startRow).then((results) => {
        if (results == null) return;

        data.push(results);
        startRow++;
        return startQuery();
    });
}

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