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

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

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

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

Node.js

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

Q&A

受付中

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

eggman
eggman

総合スコア21

Javadoc

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

Node.js

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

1回答

0グッド

0クリップ

1381閲覧

投稿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()~~だったりで、調べてやっているのですが、うまくいかない状態が続いています。
アドバイス頂けたら嬉しいです。

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答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

総合スコア17892

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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で関数を作って処理をしなしとダメってことですね、 その通りです。

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Javadoc

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

Node.js

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