Как вернуть обещание от вызова set () Firebase Firestore?

WebRequest - это абстрактный класс, который не имеет свойства CookieContainer. Кроме того, вы не можете использовать коллекцию заголовков (исключение не реализовано), поэтому любая попытка, например webRequest.Headers.Add («Cookie», «...»), не будет выполнена.

Извините, но у вас есть нет возможности использовать файлы cookie с помощью WebRequest.

Придерживайтесь HttpWebRequest и добавляйте / редактируйте столько куки, которые вам нравятся, используя коллекцию Headers!

0
задан Thomas David Kehoe 15 January 2019 в 23:25
поделиться

2 ответа

Я понял, что это работает:

exports.Google_EStranslateEN = functions.firestore.document('Users/{userID}/Spanish/Translation_Request_Google').onUpdate((change, context) => {
  if (change.after.data().word != undefined) {
    // copied from https://cloud.google.com/translate/docs/quickstart-client-libraries
    // Imports the Google Cloud client library
    const {Translate} = require('@google-cloud/translate');
    // Your Google Cloud Platform project ID
    const projectId = 'myProject-cd99d';
    // Instantiates a client
    const translate = new Translate({
      projectId: projectId,
    });
    const word = change.after.data().word; // The word to translate
    const options = {
      from: 'es', // the source language
      to: 'en', // the target language
      format: 'text' // HTML vs. plain text
    };
    let translationArray = [];  // clear translation array
    return translate.translate(word, options)  // this return is critical
    .then(function(results) {
      let translation = results[0];
      translationArray.push(translation);
      admin.firestore().collection('Dictionaries').doc('Spanish').collection('Words').doc(word).collection('Translations').doc('English').set({
        translationArray: translationArray,
        language: 'en',
        longLanguage: 'English'
      });
    })
    .then(function() {
      console.log("Write succeeded!");
    })
    .catch(function(error) {
      console.error(error);
    });
  } // close if
});

Ключ должен был вернуть функцию перевода:

    return translate.translate(word, options)

Функция облака также работает быстрее.

Даг Стивенсон ответил на мой предыдущий вопрос :

Вы не возвращаете обещание, выполненное после завершения всей асинхронной работы. Если вы этого не сделаете, Cloud Functions предполагает, что вся ваша работа завершена, и ограничит все ресурсы, а все ожидающие работы будут закрыты.

Обещание, возвращённое translate.translate().then().catch(), игнорируется. Ваш вложенный вызов admin.firestore()...set() имеет похожую проблему. Недостаточно просто вызывать then() и catch() для каждого обещания, потому что then() и catch() оба возвращают еще одно обещание.

Похоже, фраза «вернуть обещание» используется здесь двумя способами. Сказать, что translate.translate() возвращает обещание, отличается от того, что мне нужно вернуть обещание путем кодирования return translate.translate(). Возможно, было бы яснее, если бы Дуг сказал «вернуть функцию» вместо «вернуть обещание»?

Мне также не ясно, нужно ли мне возвращать эту функцию:

[112 ]

Работает одинаково с или без return.

0
ответ дан Thomas David Kehoe 15 January 2019 в 23:25
поделиться

Метод Firebase JavaScript (Web) SDK .set возвращает обещание, то есть обещание уже существует. См. Электронная документация «Задать документ ».

// Add a new document in collection "cities"
db.collection("cities").doc("LA").set({
    name: "Los Angeles",
    state: "CA",
    country: "USA"
})
.then(function() {
    console.log("Document successfully written!");
})
.catch(function(error) {
    console.error("Error writing document: ", error);
});

Возможно, вам будет проще использовать async / await (более интуитивно понятный). В этом сценарии вы бы сделали что-то вроде:

async function writeDocument(obj){
  var writeOperation = await db.collection("cities").doc("LA").set(obj);
  //now this code is reached after that async write
}
0
ответ дан Ron Royston 15 January 2019 в 23:25
поделиться
Другие вопросы по тегам:

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