別のjsファイルの関数でkintone.promiseを使用したい

複数のアプリで同じような処理を行うことが多いため、jsファイルの分け方についてや別のjavascriptファイルの関数読み込む方法を参考にして、下記のようにjsファイルをわけています。
common.js=複数のアプリで使用する関数

main.js=kintone各イベント時の処理(アプリ独自の処理やcommon.jsの関数を呼び出す)を記載、

common.jsの関数でkintone.promiseを使用しているものがあるのですが、
resolve()あるいはreject()のところで、関数が返されず、処理が進んでしまいます。
common.jsの関数の処理を、main.jsにべた書きすると、うまく処理されるので、関数の処理そのものには問題ないと思うのですが…。

このような書き方では、kintone.promiseは動かないのでしょうか。
また、上記のようなファイル構成を実現するには、どのように書くのが一般的・適切なのでしょうか。

ご教示よろしくお願い致します。

【common.js】

jQuery.noConflict();
(function($) {
"use strict";
window.名前= window.名前|| {};
window.名前.処理内容= {};
window.名前.処理内容.関数= {
関数A: function(event){

return new kintone.Promise(function(resolve, reject) {
var 値A=event.record['フィールドA'].value;

// クエリ文の設定(GET用)
var queryGet = {
"app": App,
"query": 'フィールドA= \"'+値A+'\" order by フィールドA desc limit 1'
};
//アプリBから該当のレコードがあるか検索
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', queryGet).then(function(resp) {
if (resp.records.length !== 1) {
resolve(event);
}

var respRec = resp.records[0];
//×××の場合は何もしない
if(respRec['フィールドB']['value']==×××){
resolve(event);
}

// クエリ文の設定(PUT用)
var queryPut = {
"app": App,
"updateKey": {
"field":'フィールドA',
"value":値A
},
"record": {
"フィールドB":{
"value":xxx
}
}
};

kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', queryPut).then(function(resp) {
resolve(event);
return event;
},function(error) {
event.error='エラー';
resolve(event);
})

},function(error) {
event.error='エラー';
resolve(event);
});
});
}

}


})(jQuery);

 

【main.js】

jQuery.noConflict();
(function($) {
"use strict";

  // 保存前処理(編集)
kintone.events.on('app.record.edit.submit', function(event) {
var record = event.record;


// アプリB更新
event=名前.処理内容.関数.関数A(event);
return event;

});

})(jQuery);

KK さん

下記では、関数Aが非同期処理なので関数Aの完了を待たずに return event; が実行されます。

event=名前.処理内容.関数.関数A(event);
return event;

単純に、下記でいいと思います。試してみてください。

return 名前.処理内容.関数.関数A(event);

rex0220 様

いつもコメントやブログ等、参考にさせていただいております。
ご連絡遅れて申し訳ありません、コメントありがとうございます。

ご提示いただいたとおりに修正してみましたが、
やはりresolve()のところで、処理が終わっていないようです。

DevToolsで関数Aの処理を追ってみたところ
「//アプリBから該当のレコードがあるか検索」のところで、件数=0でresolve()というコードは通過するものの、
次の「//×××の場合は何もしない」という処理に進んでいるように見えます。
(respRecがないため、respRec[‘フィールドB’][‘value’]がundefindedになり、処理が落ちるので、一見うまく動いているように見える?)

javascriptの非同期処理に手こずっております…。

すみません、関数の中身まで見ていませんでした。

resolve() しても、後続処理は進みます。

処理を完了する場合は、resolve() 後に return してください。

rex0220 様

早速のご返信ありがとうございます。

>resolve() しても、後続処理は進みます。
あ、なるほど。
resolve()・reject()で、処理が終わるものだと勘違いしてました。
resolove()・reject()で、処理が終わるのではなく、元に返る(=処理は続く、のでreturnしないといけない)、という理解でだいじょうぶでしょうか?

取り急ぎ、ご提示いただいた「resolve() 後に return 」で処理から抜けられました。

ありがとうございます!