質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

28975閲覧

uncaught(in promise) Objectエラーについて

saito3

総合スコア11

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/08/14 10:19

前提・実現したいこと

javascriptでKINTONEというシステムのチェック機能を作ってます。
ほぼほぼやりたいことはソースコードで書けたのですが、謎のエラーが出て困ってます。

発生している問題・エラーメッセージ

uncaught(in promise) Object

該当のソースコード

javascript

1kintone.events.on(submit, event=>{ 2try { 3 check2(event); 4 check3(event); 5 check4(event); 6 check5(event); 7 check6(event); 8 } catch (e) { 9 // e { 10 // code: エラー部分のフィールドコード 11 // mainTxt: フィールドコードのエラーに入れるテキスト 12 // subTxt: eventオブジェクトのエラーに入れるテキスト 13 // }; 14 var fCode = e.code; 15 record[fCode]['error'] = e.mainTxt; 16 event.error = e.subTxt; 17 return event; 18 } 19}); 20async function check6(event){ 21 let query = kintone.app.getQueryCondition(); 22 let record = event.record; 23 let records = await fetchRecordsFunc(thisAppId, query); 24 var start = record.案件開始日.value; 25 var end = record.案件終了日.value; 26 var startDate = new Date(start); 27 var endDate = new Date(end); 28 var errObj = new Object(); 29 console.log(records); 30 ///////////////////////////////////////////////////////// 31 //ここのfor分で題名の謎のエラーが出ます。 32 ///////////////////////////////////////////////////////// 33 for(var i=1 ; i < records.length ; i++){ 34 if(records[i].$id.value == record.$id.value) continue;//同レコードの場合スキップ 35 36 if(records[i].エンジニアID.value == record.エンジニアID.value){ 37 let end2 = records[i].案件終了日.value; 38 let end2Date = new Date(end2); 39 console.log(startDate.getTime()); 40 console.log(end2Date.getTime()); 41 42 if(startDate.getTime() < end2Date.getTime()){ 43 errObj.code = "案件開始日"; 44 errObj.mainTxt = "案件期間が被ってます。"; 45 errObj.subTxt = "案件開始日"; 46 throw errObj; 47 } 48 } 49 } 50 } 51 /** 52 * kintoneと通信を行うクラス(check-6で使用) 53 */ 54 function fetchRecordsFunc (appId, optQuery, optOffset, optRecords) { 55 let limit = xxx; 56 let query = optQuery || ""; 57 let offset = optOffset || 0; 58 let allRecords = optRecords || []; 59 60 // query += 'order by asc limit ' + limit + ' offset ' + offset; 61 query += 'limit ' + limit + ' offset ' + offset; 62 63 let params = { 64 "app" : appId, 65 "query" : query 66 }; 67 68 return kintone.api('/k/v1/records', 'GET', params).then( resp => { 69 allRecords = allRecords.concat(resp.records); 70 if (resp.records.length === limit) { 71 return fetchRecordsFunc(appId, optQuery, offset + limit, allRecords); 72 } 73 return allRecords; 74 }); 75 }

試したこと


オブジェクトの宣言を、
errObj = {};
から
errObj = new Object();
に変更。


for分でエラーオブジェクトに値を入れたらbreakさせてthrow。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

質問文にあるコードでは非同期関数check6()で発生した例外をキャッチすることができないため当該のエラーメッセージが発生しているものと思われます。

uncaught(in promise)というエラーメッセージは、Promiseオブジェクトが担っている処理において発生した例外がキャッチされなかった場合に発生します。
今回の場合、check6()async functionとして定義されているためcheck6()の返り値がPromiseオブジェクトとなります。
コードの最初のほうにあるtryの中でcheck6()を呼び出していますが、非同期関数の本体は実行せずにPromiseオブジェクトを生成するだけで素通りしてしまうのでここで非同期関数内の例外が発生することはありません。非同期関数の本体はtryの外で実行されることになります。

解決方法としては以下のいずれかが考えられます。

  • try句の中で非同期関数の実行を待つ

javascript

1// `await`は非同期関数の中でしか使えません 2kintone.events.on(submit, async event => { 3 try { 4 // ... 5 await check6(event); 6 } catch (e) { 7 // ... 8 } 9});
  • Promiseオブジェクトの.catch()メソッドを使う

javascript

1check6().catch(errObj => { 2 // ... 3});
  • check6()async functionではなくfunctionにする

投稿2018/08/14 23:29

reosablo

総合スコア339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saito3

2018/08/15 09:02

1つ目の対処方法で解決できました! ありがとうございます!
guest

0

let records = await fetchRecordsFunc(thisAppId, query);

スマホで斜め読みなので間違えてたらゴメンナサイ。
thisAppIdて値入ってます?

投稿2018/08/14 14:53

編集2018/08/14 14:54
oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saito3

2018/08/15 08:39 編集

あ、これはグローバル変数なので、その部分は消して載せてます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問