どなたか、助けてください。。。【kintone】'app.record.edit.show' のイベントにおけるPromiseについて

app.record.edit.showイベントにおいて、promiseを使って、サーバ情報を取得したいと考えております。

jQuery.noConflict();
(function($) {
"use strict";
kintone.events.on('app.record.detail.show', function(event) {


var groupname = new kintone.Promise(function(resolve, reject) {
var loginUserCode = kintone.getLoginUser()['code'];
var path = '/v1/user/groups';
var data = {code: loginUserCode};
kintone.api(path, 'GET', data, function(resp){
resolve(resp);
})
})


kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
resolve(resp);
})
})

return kintone.Promise.all([groupname]).then(function(results) {

// ***** 後略

するとconsole.log上、以下のエラーが出力されます。

Uncaught Error: app.record.detail.show is not allowed to return “Thenable” object.

これについては、過去の投稿を調べてapp.record.edit.showではプロミスが使えないとのことでした。

 

しかしながら、実際には、エラーが出力されながらもgroupnameを取得することができ期待する動作が確認できております。一方でmobile.record.edit.showにおいては、動作しないことがわかりました。

いずれにしても、本エラーを解決しなくてはならないのですが、方法がわからずに途方に暮れています。

app.record.edit.showのイベント時に、ユーザーのグループ名を取得する必要があり、promise以外でこれを取得する術がないと思っているのですが、何か方法はございませんでしょうか?

何卒、宜しくお願い申し上げます。

 

 

やりたいこととしてはedit.showのイベントで、promiseで取得した情報をフィールドに反映させたいということですか?

 

エラーについてはpromiseをreturnしてるからそのエラーが出ているので、returnしなければエラーは出ないと思います。

 

ryoryo さん

こんにちは。ひよこです。

TK さんがおっしゃるように edit.showのイベントで、promiseで取得した情報をフィールドに反映させたいのであれば、

編集画面に /v1/user/groups で取得した値を表示させたいのであれば、promise を return させずに
レコードの値を取得する / レコードの値をセットする API を使うとできます。

kintone.api(kintone.api.url('/v1/user/groups'), 'GET', data).then(function(resp){
var groupName = resp.groups[0].name;
var record = kintone.app.record.get();
record.record.group.value = groupName;
kintone.app.record.set(record);
return event;
});

もしかしてPromise.All なのでイベント内で複数 REST API を実行したいということでしょうか…?(途中 /k/v1/records を呼んでる?)

TK様、ひよこ様

ご回答ありがとうございます。

ご回答いただいた通り、promiseをreturnしないことで単純に解決することができました。

Promise.Allについては、もともと複数のものを実行しようと思っていたのですが、今回提示するコードでは混乱をまねくため、

単一のREST APIを実行する形で提供させて頂きました。

ただし、問題としてはご指摘の通りでした、

本当に助かりました。心より御礼申し上げます。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。