1

私は、非同期の問題に慣れていない初期のコーダーです。簡単にするために、私の問題を説明する簡単な例を作成しました。クエリを実行し、その結果で他の 2 つのクラウド関数を呼び出す単純な関数があります。次に、返されたオブジェクトの .set 値と .save() を試みます。.save() を除いて、すべてが正しく実行されているようです。promises/.then およびその他のいくつかのトリックを使用してみましたが、何も機能しませんでした。誰かが最も単純で直接的な解決策を提供できれば、本当に感謝しています。

Parse.Cloud.define("test", function(request,response){  
    query.equalTo("name",request.params.name);
    query.first(
        success: function(result){
            result.set("testAverage", Parse.Cloud.run("calcAverage",{"name":request.params.name,"type":"test"}));
            result.set("quizAverage", Parse.Cloud.run("calcAverage",{"name":request.params.name,"type":"quiz"}));
            result.save();
        },
        error: function(){
            response.error("error");
        }
    );
    return result;
}); 

PS 私の実際のシナリオでは、2 つだけでなく、他のクラウド機能への 10 ~ 20 の並列呼び出しがあります。

ありがとう!

4

1 に答える 1

2

あなたが現在コーディングしている方法では、クラウド関数が返される前に result.save() が呼び出される可能性があると思います。また、成功のコールバック関数内で参照されたときに request.params.name が適切に機能するかどうかもわかりません。

parse のバージョンが promise をサポートしていることを確認してから、次のようにコードを整理してみてください。

function queryTestAverage(name) {
    return Parse.Cloud.run("calcAverage",{"name":request.params.name,"type":"test"});
}

Parse.cloud.define("test", function(request, response) {

    query.equalTo("name", request.params.name);
    return query.first()
})
.then(function(results) {
    var name = results.get("name");
    Parse.Promise.when([queryTestAverage(name), queryQuizAverage(name)]).then(
        function(result1, result2) {
            results.set("testAverage", result1);
            results.set("quizAverage", result2);
            results.save();
        }

}

注:上記のコードはサンプル用であり、そのままでは機能しない場合があります。

情報源:

于 2013-10-22T01:27:56.323 に答える