首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待dbRef.set({codeVerifier,state})。SyntaxError:等待仅在异步函数和模块的顶层主体中有效

等待dbRef.set({codeVerifier,state})。SyntaxError:等待仅在异步函数和模块的顶层主体中有效
EN

Stack Overflow用户
提问于 2022-03-01 07:14:53
回答 2查看 97关注 0票数 0

我有以下应用程序,应该使用twitter进行授权,并且我使用的是Firestore。我使用的是nodejs,我遇到的问题是当我在onRequest中使用onRequest时,它应该返回一个响应并将值设置到一个消防站数据库。下面是我的代码

代码语言:javascript
复制
const functions = require("firebase-functions");

const admin = require("firebase-admin");
admin.initializeApp();

const dbRef = admin.firestore().doc("tokens/demo");

const TwitterApi = require("twitter-api-v2").default;

const twitterClient = new TwitterApi({
  clientId: "",
  clientSecret: "",
});

const callBackUrl = "http://127.0.0.1:5000/lucembot/us-central1/callback";

exports.auth = functions.https.onRequest((request, response) => {
  const {url, codeVerifier, state} = twitterClient.generateOAuth2AuthLink(callBackUrl, {
    scope: ["tweet.read", "tweet.write", "users.read", "offline.access"],
  });

  await dbRef.set({codeVerifier, state});

  response.redirect(url);
});

exports.callback = functions.https.onRequest((request, response) => {});

exports.tweet = functions.https.onRequest((request, response) => {});

我的错误越来越少

代码语言:javascript
复制
await dbRef.set({codeVerifier, state});
  ^^^^^

SyntaxError: await is only valid in async functions and the top level bodies of modules
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1026:15)
    at Module._compile (node:internal/modules/cjs/loader:1061:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1151:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47

Node.js v17.6.0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-02 12:13:06

顶级等待意味着您试图在异步函数之外使用异步/等待语法。您可以在异步函数下运行等待语句。

所以,你必须写你的:

代码语言:javascript
复制
 functions.https.onRequest( (request, response) => { 
 
 as
 
 functions.https.onRequest( async (request, response) => { 

想了解更多细节。检查这里

票数 1
EN

Stack Overflow用户

发布于 2022-03-01 07:32:40

通常等待的是返回承诺的函数,而不是返回请求对象并期望您使用回调或事件侦听器知道何时完成任务的函数。通常,我会建议你使用请求-承诺模块。

但是,由于请求承诺已被否决,以下是不依赖于NPM请求包的其他选项。got已经被提到了,但它取决于其他11个软件包。

相反,axios只有一个依赖项(用于重定向)。其他一切都是本机实现的,并构建在本机NodeJS包之上。

下面是一个使用axios的示例:

代码语言:javascript
复制
const axios = require('axios')
const response = await axios.get(callbackUrl)
const result = response.data

或者,作为JavaScript中的一条直线

代码语言:javascript
复制
const result = (await axios.get(callbackUrl)).data
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71304921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档