WebRequest - это абстрактный класс, который не имеет свойства CookieContainer. Кроме того, вы не можете использовать коллекцию заголовков (исключение не реализовано), поэтому любая попытка, например webRequest.Headers.Add («Cookie», «...»), не будет выполнена.
Извините, но у вас есть нет возможности использовать файлы cookie с помощью WebRequest.
Придерживайтесь HttpWebRequest и добавляйте / редактируйте столько куки, которые вам нравятся, используя коллекцию Headers!
Я понял, что это работает:
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 предполагает, что вся ваша работа завершена, и ограничит все ресурсы, а все ожидающие работы будут закрыты.
Обещание, возвращённое
blockquote>translate.translate().then().catch()
, игнорируется. Ваш вложенный вызовadmin.firestore()...set()
имеет похожую проблему. Недостаточно просто вызыватьthen()
иcatch()
для каждого обещания, потому чтоthen()
иcatch()
оба возвращают еще одно обещание.Похоже, фраза «вернуть обещание» используется здесь двумя способами. Сказать, что
translate.translate()
возвращает обещание, отличается от того, что мне нужно вернуть обещание путем кодированияreturn translate.translate()
. Возможно, было бы яснее, если бы Дуг сказал «вернуть функцию» вместо «вернуть обещание»?Мне также не ясно, нужно ли мне возвращать эту функцию:
[112 ]Работает одинаково с или без
return
.
Метод Firebase JavaScript (Web) SDK .set
возвращает обещание, то есть обещание уже существует. См. Электронная документация «Задать документ ».
blockquote>// 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 }