function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
R H 4R H 4 

enqueueActionについて

お世話になっております。

Lightningコンポーネントで取引先検索機能を作成しております。
キーワードが入力された際にkeyUpでイベントを起こして、キーワードに一致する取引先を画面に表示する機能です。

キーワードに一致しない取引先が画面に表示されることが時々あります。
例えば、キーワードに「abc」と入力しているにもかかわらず、「株式会社ab」が表示されてしまいます。

コンポーネントのコントローラです。
KeyChange: function(component, event) {
        var Key = event.getParam("Key");
        var action = component.get("c.findByName");
        action.setParams({
            "Key": Key
        });
        
        action.setCallback(this, function(a) {
        console.log('2_' + Key);
            component.set("v.AccList", a.getReturnValue());
        });
        
        console.log('1_' + Key);
        $A.enqueueAction(action);
    }

enqueueAction直前(1)とsetCallback直後(2)でログを取得したところ以下のようになりました。
1_a
1_ab
1_abc
2_a
2_abc
2_ab

enqueueActionで渡した処理が、setCallbackでは順番通りに出力されていません。
非同期で行われることが原因と考えておりますが、enqueueActionで渡した処理をsetCallbackで順番通りに受け取ることは可能でしょうか。

現在はkeyUpをchangeに変更する、検索ボタンにする、最後に入力したキーワードの結果のみを画面に表示するつくりにする等の方法で対処しておりますが、setCallbackで順番通りに結果を受け取ることが理想です。

ご存じの方がいらっしゃいましたらご教授頂きたいです。
どうぞ宜しくお願い致します。
ikouikou
少し前の投稿なので既に解決されているかもしれませんが。

enqueueActionはすぐにサーバー側に処理が投げられるわけではなく、一度キューに溜まってLightningのフレームワーク側でまとめて1つのHTTPのリクエストにされ、フレームワーク側のタイミングでサーバーに投げられます。
どうもそのため戻りのHTTPレスポンスもまとめて戻ってきて、それから非同期でsetCallbackが動いているのだと思います。
この順番を制御する方法は分からないのですが、今回の検索でいえば最後の1回だけ実行されればいいはずなので、前回アクションを中止してしまうというのはどうでしょうか。

https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/controllers_server_abortable_actions.htm

実際に試したわけではないのですが、もし解決の手がかりになれば幸いです。