当前位置: 首页 > 知识库问答 >
问题:

如何在异步函数外访问promise值

苏品
2023-03-14

我试图理解promise、回调等在node.js中是如何工作的,特别是在访问函数之外的值的情况下。我花了一些时间在这里浏览答案如何从异步调用返回响应?在这里调用条纹API等待,但我尝试的每一个变化,我总是以'订阅'函数之外未定义结束。

谢啦

let subscription;
async function getSub(){
    subscription = await stripe.subscriptions.retrieve('sub_HurxwcQoCIH7jv');
    // code here only executes _after_ the request is done?
    return subscription
}
getSub()
console.log("subscription: ", subscription) // subscription undefined??

共有2个答案

蓬宾白
2023-03-14

在异步函数之后编写的代码将在同步函数之后执行,但在异步函数之前完成,因此它将是未定义的,如第一行中设置的让订阅//未定义

让我们把它切成碎片,并按发生的时间顺序编号:

1. let subscription;
2. async function getSub(){
    5. subscription = await stripe.subscriptions.retrieve('sub_HurxwcQoCIH7jv');
    // code here only executes _after_ the request is done?
    6. return subscription
}
3. getSub()
4. console.log("subscription: ", subscription) // subscription undefined??

如您所见,控制台日志将发生在分配之前,因为2。时间超过3分钟。四,。因为5。在里面。

你应该这样做:

(async () => {
  const sub = await stripe.subscriptions.retrieve('sub_HurxwcQoCIH7jv')
  console.log(sub) //
})()

您还可以将函数命名为:

const functionWithSomeName = async () => {
  const sub = await ...CODE HERE...
  console.log(sub)
}

functionWithSomeName()
叶俊郎
2023-03-14

有两种方法可以让你得到回应

getSub()
.then(subscription => {
    console.log("subscription: ", subscription);
});

const funcA = async() {
    const subscription  = await getSub();
    console.log("subscription: ", subscription);
}
funcA();
 类似资料:
  • 我正在使用编写promise代码。然后现在,我决定使用wait/async编写它。我在promise中调用了一个函数add_,然后在中调用了另一个函数。然后是该函数的一部分。这是我使用的代码。然后 这是使用wait/async的代码。 使用await/async的代码显示了一个错误,即add\u lessons是意外标识符。那么,告诉我如何在promise中定义异步函数?

  • 问题内容: 我正在开发Spotify应用。我可以登录并获取我的令牌。我的问题是我无法在方法外访问变量。在这种情况下 这是我的方法: 如您所见,我在console.log中记录了名称,并在控制台中获得了正确的值。但是仅在我调用即使返回names变量的情况下得到的函数的情况下,它也可以在这里使用。 我需要那个变量。 问题答案: 没有返回任何东西。你需要从返回的承诺,然后当你回到内 即 它是由外部函数返

  • 问题内容: 我试图将两个异步函数链接在一起,因为第一个具有条件返回参数,导致第二个运行或退出模块。但是,我发现规格中找不到奇怪的行为。 这是我的代码的混帐摘要(您可以在此处查看完整的范围),该代码只是检查玩家是否已经在大厅中,但这无关紧要。 接下来,我们有这个异步功能。 如果,则无需运行此功能。 我试着做 我希望这将等待结果,以便可以有条件地运行,但是我收到了没有具体细节的类型错误。 为什么您不能

  • 我已尝试在当前区域外删除脚本: 我得到这个错误:

  • 我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做