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

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

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

Javadocは、Java言語で記述されたクラスライブラリ、及びアプリケーションについてのパッケージ・クラス・メソッドのHTML形式のAPI仕様書のことを指します。ドキュメント更新の漏れを減らすことができ、最新の状態を把握することが可能になります。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

1回答

2770閲覧

javascriptでpromist<pending>の値を返したい

eggman

総合スコア21

Javadoc

Javadocは、Java言語で記述されたクラスライブラリ、及びアプリケーションについてのパッケージ・クラス・メソッドのHTML形式のAPI仕様書のことを指します。ドキュメント更新の漏れを減らすことができ、最新の状態を把握することが可能になります。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2022/04/28 06:35

前提

node.js express firestoreを使って自己紹介アプリを作成しています。

実現したいこと

userIdとpasswordをfirestoreから取ってきて、ユーザーから受け取ったものと一致しているか確認し、okならtrue、間違っていたらfalseを返す関数を作っているところで、返り値がPromise<pending>になっておりこれをtureかfalseと表示させたいです。

該当のソースコード

非同期処理のpromiseをどのように扱えばいいか

model.js

1exports.isRightOrNot = async function isRightOrNot(userId, password) { 2 const userRef = db.collection("xxx").doc("xxx"); 3 const doc = await userRef.get(); 4 if(doc.exists && doc.data().password === password) { 5 console.log("ok"); 6 return true; 7 } else { 8 return false; 9 } 10}

main.js

1const re = isRightOrNot("XXX","xxx"); 2console.log(re); 3 4$ Promise { <pending> }

このreにtrueかfalseを入れたい

試したこと

then()~~だったりで、調べてやっているのですが、うまくいかない状態が続いています。
アドバイス頂けたら嬉しいです。

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

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

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

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

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

guest

回答1

0

async である関数 isRightOrNot() の結果を得るためには、呼ぶときに await を使います。

js

1const re = await isRightOrNot("XXX","xxx");

または、then() の中に後続の処理を入れます。

js

1isRigthOrNot("XXX","xxx").then(re => { 2 console.log(re); 3});

投稿2022/04/28 06:51

int32_t

総合スコア20882

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

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

eggman

2022/04/28 06:57

ありがとうございます。 .then()はmodel.jsの関数を書いてある方でしょうか? それとも、mainの方の関数を呼び出している方でしょうか?
int32_t

2022/04/28 07:01

関数呼び出しを書き換えます。
eggman

2022/04/28 07:03

const re = await isRightOrNot("kkk", "kkk").then(re => { console.log(re); }); こんな感じでやったのですが、SyntaxError: await is only valid in async functions and the top level bodies of modulesというエラーが出てしまいました。
int32_t

2022/04/28 07:17

回答を誤読しています。 コードブロックのどちらかを採用してください。両方はできません。
int32_t

2022/04/28 07:22

あと、前者の場合は全体を (async function() { ... })() などで囲む必要があります。
eggman

2022/04/28 07:59

ありがとうございます。 結局は、dbのクラスを作ってそっち側でasyncの関数を作っても、呼び出し側でもasyncで関数を作って処理をしなしとダメってことですね、 呼び出し元で、db操作するクラスのasync関数をいきなり使ってもpromiseしか出てこないということでしょうか? (問題のコードのように)
int32_t

2022/04/28 08:25

> 結局は、dbのクラスを作ってそっち側でasyncの関数を作っても、呼び出し側でもasyncで関数を作って処理をしなしとダメってことですね、 その通りです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問