3

API(第三者)を呼び出してすぐに戻りますが、APIの応答を待っている関数を作りたいと思います。ここで非同期要求が終了するまでラムダ関数が返されない

は、コードサンプルです:私はcontext.succeed()代わりのcb()を呼び出そうと

var request = require('request'); 

// When I call functionOne it should trigger functionTwo and should end immediately, 
// but unfortunately, it is waiting for functionTwo to end 
module.exports.functionOne = (event, context, cb) => { 
    const uri = 'https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/functionTwo'; 
    request.post({ uri: uri }); 
    cb(null, "done functionOne"); 
}; 

module.exports.functionTwo = (event, context, cb) => { 
    console.log("i'm functionTwo"); 
    setTimeout(function() { 
     console.log("I'm functionTwo about to end"); 
     context.succeed("done functionTwo"); 
    }, 5000); 
}; 

また、それもAPIを呼び出すことなく、すぐにAPIの呼び出しや機能の戻りを防ぎます。

また、GitHubに関する問題を作成しました。

追加情報:

  • サーバレスフレームワーク:v1.0.0デベロッパー - rc.2
  • ノード:v6.9.1
  • OS:勝利10

答えて

2

申し訳ありませんが、缶'tあなたが望むものを達成してください。少なくともこの方法ではありません。あなたがrequest.post()を使用して別の関数を呼び出すと

は、あなたが コールバックを提供しなければならないし、それが終了するのを、あなたは 待たなければなりません。

あなたができることはrequest.abort()に電話することですが、これはハックな解決策です。

module.exports.functionOne = (event, context, cb) => { 
    const uri = 'https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/functionTwo'; 
    const r = request.post({ uri: uri }, (error, response, body) => { 
     cb(error, "done functionOne"); 
    }); 

    r.abort(); 
    cb(null, 'forced abort on functionOne'); 
}; 

なぜこのハッキーですか?すぐに中止することはできないからです。要求が他のサーバーで受信されるまで数ミリ秒待つ必要がありますが、発生するタイミングを正確に知る方法はありません。

2番目のラムダが2分間実行されることがわかっている場合は、setTimeout関数を追加して、5秒後に要求を中止し、アイドル状態で長時間実行することを避けることができます。しかし、これもまた悪い解決策です。

functionTwoコードをfunctionOneの中に入れて、2番目のラムダの開始を避けるのはなぜですか?

もう1つの回避策は、functionOneからSNSトピックを呼び出し、トリガーするようにこのトピックを構成することです。functionTwo

+0

ファンクション2は実際には第三者のAPIがあり、そのAPIにポストリクエストを送信していますが、実際にはそれはスラックAPIです –

+0

スラックAPIに固有の別の質問を作成します。別のラムダ関数であれば、数ミリ秒で返るのでSNSを使うことができます。スラックが完了するまでに数秒かかる場合は、待たずにリクエストを待ち行列に入れる別の方法を提供しているかどうかわかりません。 – Zanon

+0

そうでなければ、ラムダを早期に強制的に停止させる要求を中止することができますが、私が言ったように、スラックが要求を受け取るまで数分待つ必要があります。 – Zanon

関連する問題