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

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

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

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

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

解決済

1回答

2676閲覧

async,await,Promiseに関するソースコードを整理する

wangzj

総合スコア53

Node.js

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

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

0クリップ

投稿2018/10/11 02:33

編集2018/10/11 02:40

前提・実現したいこと

Azure Blob Trigger Apiを実装しています。目的は同期です。
async,await,Promiseについて、もっと綺麗に整理しようと思いますが、なかなか完璧にならないですね。
よいアドバイスがあれば、ぜひ!

整理前

index.js

nodejs

1var request = require('request-promise'); 2module.exports = async function (context, myBlob) { 3 context.log("JavaScript blob trigger function processed blob \n Name:", context.bindingData.name, "\n Blob Size:", myBlob.length, "Bytes"); 4 var optionsLatest = { 5 url: 'http://127.0.0.1/blockchain/latest', 6 json: true 7 } 8 await request(optionsLatest) 9 .then(function (body) { 10 context.log(body); 11 }) 12 .catch(function (err) { 13 context.log(err); 14 }); 15}

整理後

index.js

nodejs

1var optionsBC = require('./options'); 2module.exports = async function (context, myBlob) { 3 context.log("JavaScript blob trigger function processed blob \n Name:", context.bindingData.name, "\n Blob Size:", myBlob.length, "Bytes"); 4 var res = await optionsBC.getLatestRes(); 5 context.log(res); 6}

options.js

nodejs

1var request = require('request-promise'); 2async function getLatestRes() { 3 var optionsLatest = { 4 url: 'http://127.0.0.1/blockchain/latest', 5 json: true 6 } 7 return await request(optionsLatest) 8 .then(function (body) { 9 return body; 10 }) 11 .catch(function (err) { 12 return null; 13 }); 14} 15 16exports.getLatestRes = getLatestRes

試したこと

取り合えず、↑の整理後のものになっています。
完璧になりません(index.jsにawaitをつけるのはいやだ)が、仕方がありません。
nodejsであれば、多少我慢しないといけないですね。
いろんなパターンで試してみました、まとめて言うと:
①Promise を返す関数の呼び出しに await を付ける
②await を使う関数に async を付ける

ですので、index.jsにawaitを省略できません。そうしないと同期にならないです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

整理後の option.js にちょっと手を加えてみます。

try catch を使って見やすくするパターン

var request = require('request-promise'); async function getLatestRes() { var optionsLatest = { url: 'http://127.0.0.1/blockchain/latest', json: true } try { var body = await request(optionsLatest) return body } catch (err) { return null } }

単純にリファクタするパターン

var request = require('request-promise'); function getLatestRes() { var optionsLatest = { url: 'http://127.0.0.1/blockchain/latest', json: true } return request(optionsLatest).catch(() => null) }

投稿2018/10/11 04:09

set0gut1

総合スコア2413

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問