Вы не перевели await
из getClient
.Помните, await
= then
(примерно).Вы также становитесь жертвой анти-паттерна создания обещаний : когда у вас уже есть обещание (от getClient
), вам почти никогда не нужно использовать new Promise
.Просто используйте then
.
Вот пример с каждым await
, преобразованным в then
, используя цепочку для последующих операций:
function connectGoogleAPI () {
// Create a new JWT client using the key file downloaded from the Google Developer Console
return google.auth.getClient({
keyFile: path.join(__dirname, 'service-key.json'),
scopes: 'https://www.googleapis.com/auth/drive.readonly'
}).then(client => {
// Obtain a new drive client, making sure you pass along the auth client
const drive = google.drive({
version: 'v2',
auth: client
});
// Make an authorized request to list Drive files.
return drive.files.list();
}).then(res => {
console.log(res.data);
return res.data;
});
}
Эта последняя часть может быть просто
}).then(res => res.data);
... если вы удалите console.log
.(Или мы можем злоупотреблять оператором запятой.)
Примечания:
- Каждый
await
должен стать обработчиком then
(в оригинале их было два, ожидающих * 1028)* и drive.files.list
) - В обработчике
then
, если вам приходится ждать другого обещания (например, от drive.files.list
), вы обычно возвращаете его из обработчика, а затем используйте другой обработчик для обработки этого результата (поэтому у меня есть return drive.files.list()
, а затем отдельный обработчик для преобразования res
в res.data
)
Reвторой пункт: Иногда целесообразно вложение , например, когда вам нужно объединить результат с некоторым промежуточным значением, которое вы имеете только в обработчике then
.(Например, если мы хотим объединить res.data
с client
.) Но, как правило, предпочитайте не вкладывать.