Как правильно выполнить обещание - PullRequest
0 голосов
/ 23 мая 2019

Я не уверен, что делаю это правильно.У меня есть ряд ответов, основанных на определенных переменных набора.Я хочу выполнить обещание, чтобы после их завершения приложение запускало следующую строку кода.вот мой код:

const promises = []

if (this.score >= this.scoreNeeded) {
  this.correct = true
  this.retrieveCode(this.clueorder)
  this.feedback = 'Congrats you are moving on. Here is your next code '
} else {
  console.log('1')
  if (locimgface && !this.smile) {
    this.feedback += 'You need to smile in your picture. '
  }
  if (locimgfacesurprise && !this.surprise) {
    this.feedback += 'You need to look very surprised in your picture. '
  }
  if (locimgfacesorrow && !this.sorrow) {
    this.feedback += 'You need to look really sad in your picture. '
  }
  if (locationimagetexton && !this.atLocation) {
    this.feedback += 'We could not find the text in the image. It needs to have one of these words "' + locationimagetextwithspaces + '" somewhere in the picture. '
  }
  if (locationimagelabelon && !this.foundItem) {
    this.feedback += 'We could not find the item in the image. It needs to have one of these items "' + locationimagelabelswithspaces + '" somewhere in the picture. '
  }

  promises.push(this.feedback)

  Promise.all(promises).then(() => {
    console.log('completed from promise');
    this.deleteImage(this.fullPath)
  }).catch(err => {
    console.log(`ERROR: ${JSON.stringify(err)}`);
  })
}

Что я пытаюсь сделать, это убедиться, что все сообщения обратной связи установлены правильно, а затем запустить функцию deleteImage, кроме того, в блоке кода для хорошего результата я быхотел бы дождаться ответа от retrieveCode, прежде чем публиковать отзыв.

Как всегда, любая помощь очень ценится.

ОБНОВЛЕНИЕ:

Возможно, я делаю это неправильно, ноЕсть несколько триггеров.

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

Если программа ищет удивленный вид, текст и ярлык, а пользователь отправляет снимок с удивленным выражением и текстом, он получит сообщение с сообщением, сообщающее, что ему нужно включить ярлык,

Если программа ищет улыбку, текст и метку («машина»), и пользователь отправляет изображение, не содержащее ни одного из них, он получит сообщение с сообщением о том, что ему нужно улыбнуться, ему необходимо предоставитьотсутствующий текст, и им нужно иметь машину на картинке.

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

Конечная цель - создать сообщение обратной связи.затем запустите следующую функцию.либо deleteImage (), либо retrieveCode () в зависимости от оценки пользователя

UPDATE 2

здесь есть функция deleteImage

deleteImage (fullPath) {
        console.log('2')
        let storage = firebase.storage();
        let storageRef = storage.ref();

        // Create a reference to the file we want to delete
        let imageRef = storageRef.child(fullPath);
        imageRef.delete().then(() => {
            console.log('3')
            this.reset()
        })
        .catch((error) => {
            console.error(`file delete error occurred: ${error}`)
        })
    },

UPDATE 3:

Вот функция retrieveCode ().

retrieveCode(clueorder) {
    // get the next clue by adding 1 to this clue
    const newclue = this.getNextClue(clueorder)

    this.$store.dispatch('retrieveCode', {
        newclue: newclue,
        oldclue: clueorder
    });
}

1 Ответ

1 голос
/ 23 мая 2019

Со страницы MDN :

Метод Promise.all () возвращает одно Обещание, которое разрешается, когда все обещания, переданные как итеративные, разрешены или когдаИтерируемый не содержит обещаний.

Базовый пример

Давайте создадим действительно базовую функцию, которая возвращает Promise (используя Promise.resolve), которая возвращает строку, которую вы ей передали.

// You could use new Promise(resolve => resolve(str));
const fetchData = str => Promise.resolve(str)

// Array of promises to wait on
const data = [
    fetchData('foo'),
    fetchData('bar'),
    fetchData('baz')
];

Promise.all(data).then(responses => {
    console.log(responses);
});

Вам также не нужно возвращать Promises, вы можете просто передать массив строк, и Promise.all их "разрешит".

// You could use new Promise(resolve => resolve(str));
const fetchData = str => str

// Array of promises to wait on
const data = [
    fetchData('foo'),
    fetchData('bar'),
    fetchData('baz')
];

Promise.all(data).then(responses => {
    console.log(responses);
});
...