Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

JavaScriptでreturnを2回実行する方法はありますか?

解決したいこと

nodejsでLINE Messaging APIを使って、Botを作っています。

クライアントからのメッセージをトリガーに、画像と一緒にテキストを戻したく、returnを使おうと思ってコードを書いていました。しかし、JavaScriptはreturnで1つの値しか返せないということを知り、どのように記述したらいいのか詰まってしまっていました。何かヒントを頂けると嬉しいです。お忙しい中大変恐縮なのですが、何卒よろしくお願いいたします。

発生している問題・エラー

return client.replyMessage(event.replyToken,pushData)
 
return client.replyMessage(event.replyToken, {
type: 'text',
text: '今日の君のラッキーモンスターは**じゃ。いい日になりそうじゃのう。'})

Botとしては、こういう形のものを作りたいと思っています。

1

5Answer

return を2回実行する方法はありません。一般的に、 return で複数の値を返す場合は配列に入れて return [value1, value2] のようにしますが、コード全体を拝見すると return された値を受け取る側が配列を想定していないのでこれも動きません。

今回は1回の client.replyMessage() で2つともメッセージを送ってしまうといいでしょう。第2引数には複数のメッセージオブジェクトを入れた配列を渡すことができます(最大5要素まで)。以下のようにしてください:

return client.replyMessage(event.replyToken, [
    pushData,
    {
        type: 'text',
        text: '今日の君のラッキーモンスターは**じゃ。いい日になりそうじゃのう。'
    }
])

参考: https://line.github.io/line-bot-sdk-nodejs/api-reference/client.html#methods

1Like

@YottyPG さん、

event.replyToken は1回のリプライ送信後に失効するようなので2回は呼べないと思います。

2回呼べたとしても非同期処理なので呼んだ順にメッセージが送信されるとは限りません。また返り値の Promise を捨てるべきではありません。

1Like

単純にメッセージを2回送った後returnするではだめなのでしょうか?
記事も拝見しましたが、戻した先でなにか処理をしているというわけではなく、client.replyMessage()でメッセージを送っているように見えました。

リファレンスにもclient.replyMessage()でメッセージが送れるような記載がありました。

質問の背景が「2つのメッセージを送りたい」ということなのであれば、以下のようにclient.replyMessage()を2回呼んでメッセージが複数送信されないでしょうか?

client.replyMessage(event.replyToken,pushData);
 
client.replyMessage(event.replyToken, {
type: 'text',
text: '今日の君のラッキーモンスターは**じゃ。いい日になりそうじゃのう。'});

return;
0Like

@uasi さん
失礼しました。replyは1回のみなのですね。
自分でLineBot作ったときに複数メッセージを送った記憶があったのですが、確認してみたところ使用していたのはmulticastでした...。
replyで同時に複数のメッセージを返す必要がある場合は、メッセージオブジェクトの配列として渡す必要があるということなのですね。

0Like

みなさま、返答ありがとうございます!初めての質問で、初めて回答をいただいたのでとても嬉しいです。

後ほど、試してみて経過を報告しますね。

0Like

Your answer might help someone💌