Поместите Javascript Promise в функции - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть два обещания, которые я разрешаю с promise.all:

var mictest1 = new Promise((resolve, reject) => {
  resolve(true);
});
var mictest2 = new Promise((resolve, reject) => {
  resolve(true);
});

Promise.all([mictest1, mictest2]).then(data => {
  console.log("test passed: " + data);
})

Я хотел бы поместить обещания mictest1 и mictest2 в функцию с именем mictest(), чтобы она выполняла следующее:

mictest();

Promise.all([mictest1, mictest2]).then(data => {
  console.log("test passed: " + data);
})

Таким образом, я могу вызвать функцию по желанию, и когда обещания усложняются, у меня нет этого блока текста перед promise.all

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

Я думаю, вы ищете функцию, которая возвращает обещание:

function mictest() {
  return new Promise((resolve, reject) => {
    resolve(true);
  });
}

Вы бы использовали его как

var mictest1 = mictest();
var mictest2 = mictest();
Promise.all([mictest1, mictest2]).then(data => {
  console.log("test passed: " + data);
})

или просто

Promise.all([mictest(), mictest()]).then(data => {
  console.log("test passed: " + data);
})
1 голос
/ 24 февраля 2020

Не совсем так, как вы себе это представляли, но вы можете подойти очень близко:

let promises = mictest();

Promise.all(promises).then(data => {
  console.log("test passed: " + data);
})

Это просто меняет две строки вашего воображаемого кода. Реализация проста:

function mictest () {
  return [
    new Promise((resolve, reject) => {
      resolve(true);
    }),
    new Promise((resolve, reject) => {
      resolve(true);
    })
  ]
}

Обещание - это значение, аналогичное строкам, числам, массивам и т. Д. c. Вы можете относиться к этому как к любому значению. Это просто объект, который имеет метод .then() и является ожидаемым

Примечание: на самом деле любой объект с методом .then() является ожидаемым, даже если вы создали собственный необъявленный объект ( фактически любой объект с .then() методом является обещанием, даже если это не обещание)

1 голос
/ 24 февраля 2020

Может быть, вы ищете функцию mictest для возврата Promise.all?

const mictest = () => {
  var mictest1 = new Promise((resolve, reject) => {
    resolve(true);
  });
  var mictest2 = new Promise((resolve, reject) => {
    resolve(true);
  });
  return Promise.all([mictest1, mictest2]);
};


mictest().then((data) => {
  console.log('test passed:', data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...