Асинхронные функции, использующие значение из обещания - PullRequest
1 голос
/ 25 июня 2019

Итак, я знаю, что этот вопрос часто задают, но я пытаюсь получить переменную, созданную в обещании. Примеры, которые я видел здесь, включают вызов .then и использование там данных, однако то, что я пытаюсь сделать, включает в себя асинхронную функцию, которую я не могу использовать в блоке .then.

Вот мой код. Я использую Asana API, чтобы вызвать списки задач, которые должны быть выполнены. Это успешно регистрирует это. Но я хочу сохранить значение списка из последнего блока как переменную, которую я могу использовать в другом месте.

const asana = require('asana');
        const client = asana.Client.create().useAccessToken("xxx");
      client.users.me()
        .then(user => {
            const userId = user.id;
            // The user's "default" workspace is the first one in the list, though
            // any user can have multiple workspaces so you can't always assume this
            // is the one you want to work with.
            const workspaceId = user.workspaces[0].id;
            return client.tasks.findAll({
              assignee: userId,
              workspace: workspaceId,
              completed_since: 'now',
              opt_fields: 'id,name,assignee_status,completed'
            });
          })
          .then(response => {
            // There may be more pages of data, we could stream or return a promise
            // to request those here - for now, let's just return the first page
            // of items.
            return response.data;
          })
          .filter(task => {
            return task.assignee_status === 'today' ||
              task.assignee_status === 'new';
          })
          .then(list => {
            console.log (util.inspect(list, {
              colors: true,
              depth: null
            }));







          })
          .catch(e => {
            console.log(e);
          });

1 Ответ

1 голос
/ 25 июня 2019

Если вы готовы переписать ваши .then () как async / await, то что-то вроде этого может сработать для вас:

const fetch = require('node-fetch');
async function doit() {
    const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
    const json = await response.json();
    console.log(json);
}
doit();
...