И .then, и .catch выполняются в одном и том же блоке кода.

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

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

Действительно, в документации Random говорится:

Текущая реализация класса Random основана на Donald E Алгоритм генератора случайных чисел Кнута.

Обратите внимание на фразу «текущая реализация», подразумевая, что она может измениться в будущем. Это очень убедительно свидетельствует о том, что не существует обещания быть совместимым между версиями, но нет никакого намерения.

Если спецификация требует последовательных псевдослучайных чисел, то она также должна указать алгоритм как начальное значение. Действительно, даже если Random был задан как предоставление такого обещания, что, если вам понадобится реализация не-.NET всей или части вашей спецификации или что-то, что взаимодействует с ней, в будущем?

1
задан sertsedat 18 February 2019 в 15:11
поделиться

2 ответа

Вы должны понимать, что .then передает результаты / ошибки следующему .then / catch . Вы не указали обратный вызов для .catch ; все, что вы делаете, это вызываете Alert.alert () сразу после .then .

Таким образом, вы должны иметь

someAsyncOperation(params)
 .then(function(result){
  // Do something with the result
 })
 .catch(function(error){
 // Handle error
});

Также обратите внимание, что все ваши .then , кажется, ничего не возвращают.

0
ответ дан Debaryoh 18 February 2019 в 15:11
поделиться

Нашли решение. Просто передал Alert.alert () в функцию стрелки в .catch. Вот так:

    function onBuy() {
    const email = firebase.auth().currentUser.email;
    const ref = firebase.firestore().collection('parties').doc(String(name)).collection('users').doc(String(email));
    const ref2 = firebase.firestore().collection('users').doc(String(email));
    ref.get()
    .then((doc) => {
        if (!doc.exists) {
            ref2.get()
            .then((doc2) => {
                if (doc2.exists) {
                    ref.set({
                        firstname: doc2.data().firstname,
                        lastname: doc2.data().lastname,
                        phone: doc2.data().phone
                    }).then(
                        ref2.update({ parties: firebase.firestore.FieldValue.arrayUnion(name) }).then(
                            Actions.pop()))
                    .catch(() => Alert.alert('error', 'oops, something went wrong'));
                }
            }).catch(() => Alert.alert('error', 'Sorry, something went wrong'));                   
        }
        else {
            Alert.alert('Purches fails', 'You have already bought a ticket to this party!');
        }
    })
    .catch(() => Alert.alert('fails', 'user problem'));
}
0
ответ дан Adar Wallerstein 18 February 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: