63407


こんにちは、JavaScript初学者です。  
今非同期処理のためのpromiseの使い方について勉強中なのですが、  
複数の関数をpromiseチェーンでつなぐ方法について、適切な書き方が分からない点がありましたので質問させてください。

まず、コードは以下のとおりです：

[code]

    function hoge(arg) {
        const promise = Promise.resolve();
        promise
            .then(func1(arg))
            .then((res) => {
                func2(res)
        });
    }
    
    function func1(a) {
        return new Promise(function (resolve, reject) {
            // 引数 a を受け取って返り値 b を求める
            resolve(b);
        });
    }
    
    function func2(c) {
        // 受け取った引数 c を使った関数
    }
    
[/code]

**やりたいこと（期待する動作）**

  1. 引数 arg が渡された関数 hoge は、関数 func1 に引数 arg を渡す
  2. 引数 arg が渡された関数 func1 は、返り値 res を引数として関数 func2 に渡す
  3. 関数 func2 は、受け取った引数 res を使って処理をする

です。ただし、1, 2を分けているのはこちらの都合で、関数 func1 を別の部分でも使いまわしたいためで、今回の質問とは関係はありません。

**この関数を実行するとどうなるか**

func1 の返り値を待たずして、 func2 に引数 undefined が渡されてしまい、 **期待する動作** ができません。  
なお関数 func1 は、単独で動かした際、引数 a を受け取って返り値 b を返すことは確認済みです。

**質問したいこと**

promiseの書き方が悪い、ということは分かっているのですが、どのように書き直したら動くのかがわかりません。  
promiseの使い方を紹介している各種Webサイトでは、then以下には新たに関数が書かれているものしか見当たらなく、別に作ったpromiseを返す関数（ここでは
func1
）を使ったものが見当たらなかったため、こちらに質問させていただいた次第です（探しもの下手なため、同様の疑問が解決されているページ等ありましたらお教えいただければ幸いです）。  
なお、func1 と func2 は別々の関数として置いておきたいため、hoge 内に直書きすることは考えていません。

以上です。皆様のお力添えをいただけましたらありがたいです。  
何卒よろしくお願いいたします。


CC BY-SA 4.0
2020-02-27T08:07:36.233
63406
2020-02-27T08:56:25.780
2020-02-27T08:33:16.520
30625
30625
question
javascript promise
JavaScriptでのpromiseチェーンの使い方


# ソース

おそらくやりたいことは下記で実現可能かと思います。

[code]

    function hoge(arg) {
        const promise = Promise.resolve();
        promise
            .then(func1(arg))
            .then((res) => {
                func2(res)
        });
    }
    
    function func1(a) {
        return function() {
            return new Promise(function (resolve, reject) {
                // 引数 a を受け取って返り値 b を求める
                resolve(a + "B");
           })
        }
    }
    
    function func2(c) {
        // 受け取った引数 c を使った関数
        console.log(c)
    }
    
    hoge("A")
    
[/code]

そもそもご質問なさったソースは

`SyntaxError: missing ) after argument list`

でエラーなので、適宜補っておきました。

# 出力結果

`AB`

# 参考

参考になるかどうかわかりませんが、  
私が以前Promiseを習得するために練習で作ったソースを書いた記事を載せておきます。

リンク：[Promiseで順番に実行したいとき](https://qiita.com/shingo-
nakanishi/items/23a5f83dc8d9d4aee8d7)


CC BY-SA 4.0
2020-02-27T08:26:46.817
63407
2020-02-27T08:56:25.780
2020-02-27T08:56:25.780
9008
9008
63406
answer