80462


下記のコードで Promiseの結果が取得され出力される事を予想していたのですが実際には `Promise { <pending> }` が表示されます。
`await stripe.paymentIntents.create({` となっているので変数 `paymentIntent`
にはPromiseで待った後の値が取れるような気がしたのですが、これは awaitが効いてないのかあるいはそういった仕様なのでしょうか?  
その場合 関数内のawaitは何を待っているのでしょうか?  
なくてもいい気がします。

[code]

    import Stripe from 'stripe'
    
    const stripe = new Stripe('sk_test_09l3shTSTKHYCzzZZsiLl2vA', { apiVersion: '2020-08-27' })
    
    async function test() {
      const paymentIntent = await stripe.paymentIntents.create({
        amount: 1099,
        currency: 'usd',
        // Verify your integration in this guide by including this parameter
        metadata: { integration_check: 'accept_a_payment' },
      })
      return paymentIntent
    }
    
    const result = test()
    console.log(result)
    
[/code]

### 追記

直ぐに実行出来そうなコードだと下記のコードになります。  
awaitがあってもなくても出力される値は同じになります。

[code]

    import fetch from 'node-fetch'
    
    async function getGithub() {
      try {
        const res = await fetch('https://api.github.com/users/github')
        return res
      } catch (err) {
        console.log(`repofetchデータの処理中にエラー：${err}`)
        return null
      }
    }
    
    const result = getGithub()
    console.log(result)
    
[/code]


CC BY-SA 4.0
2021-07-29T05:39:51.600
80457
2021-07-29T08:11:54.073
2021-07-29T07:36:54.360
22565
22565
question
javascript node.js 非同期
JavaScriptでawaitが効かない。


おそらく`stripe.paymentIntents.create`関数ではなく、`test`関数の呼び出し方の問題かと思われます。  
`async`を付与した関数は非同期に実行されるようになるので、`test`関数の戻り値は`paymentIntent`の値ではなく[Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)になってしまいます。  
また`await`を使えば待機できますが、再度`async`が必要になってきりがありません。  
手っ取り早い解決手段は、`then`関数で待機する方法です。  
以下の書き方なら想定通りの結果が出力されるのではないでしょうか？

[code]

    test().then(result => { console.log(result); } );
    
[/code]


CC BY-SA 4.0
2021-07-29T08:11:54.073
80462
2021-07-29T08:11:54.073
70
80457
answer