

JavaScriptのAsync、Awaitについて解説している記事で以下のようなサンプルコードを見かけました。

[Async/await](https://ja.javascript.info/async-await) の冒頭部分

>
[code]

>     async function f() {
>       return 1;
>     }
>  
>     f().then(alert); // 1
>  
[/code]

これが以下のコードであれば「1」が表示されることが理解できます。

[code]

    async function f() {
      return 1;
    }
    
    f().then(val => {
      alert(val);
    });
    
[/code]

しかしサンプルコードで

[code]

    f().then(alert);
    
[/code]

だけでも同じように「1」が表示される理由がわかりません。  
「1」を受け取っているように見えないのです。

これはAsyncの仕様が関係しているのでしょうか。  
それともalertの仕様に関係しているのでしょうか。

どなたかJavaScript初心者にご教示お願いいたします。


CC BY-SA 4.0
2023-07-15T02:20:50.947
95626
2023-07-15T05:35:20.107
2023-07-15T05:35:20.107
3060
34060
question
javascript 非同期 promise
asyncと値の受け取りについてわかりません


以下の MDN の記事に書いてありますが、

Promise.prototype.then()  
<https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/then>

その alert は "Promise が成功したときに非同期に呼び出される関数 (Function) です。この関数は 1 つの引数、 履行値
を取ります" と言うことだからと思います。


CC BY-SA 4.0
2023-07-15T03:49:03.143
95630
2023-07-15T03:49:03.143
51338
95626
answer


非同期処理には特には関係なく  
例えば `map` 利用時の以下の演算と似たようなものです  
(強いて言えば たぶん後者は余分な処理が加わることになるはず)

[code]

    const array1 = [2,-1,-3,4,-7];
    
    const maparr1 = array1.map(Math.abs)
    const maparr2 = array1.map(v => Math.abs(v))
    
[/code]

* * *

[`Promise.prototype.then()`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/then)
の構文では  
引数には関数を与えることになっています

[code]

    then(onFulfilled)
    then(onFulfilled, onRejected)
    
    then(
      (value) => { /* 履行ハンドラー */ },
      (reason) => { /* 拒否ハンドラー */ },
    )
    
[/code]

> `onFulfilled` 省略可  
>  `Promise` が成功したときに非同期に呼び出される関数
> ([`Function`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function))
> です。この関数は 1 つの引数、 履行値 を取ります。これが関数ではない場合は、内部的に、履行された値を送るための 識別 関数 (`(x) => x`)
> に置き換えられます。

> `onRejected` 省略可  
>  `Promise` が拒否されたときに非同期に呼び出される関数
> ([`Function`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function))
> です。この関数は 1 つの引数、 拒否理由 を取ります。これが関数ではない場合は、内部的に引数として受け取ったエラーを投げる スロワー 関数 (`(x)
> => { throw x; }`) に置き換えられます。

関数オブジェクト指定しても良いし, アロー関数でも構わない


CC BY-SA 4.0
2023-07-15T04:13:08.727
95631
2023-07-15T05:32:02.523
2023-07-15T05:32:02.523
43025
43025
95626
answer