2017-12-17 4 views
0

Azure Portalでは、Easy Tableのスクリプトを変更しています。変更されたスクリプト内のクライアントに適切に応答を戻す方法がわかりません。今、これはすべての罰金ですAzureの非同期Easy Tableスクリプト

function getUserHeader(context) { 
    return context.req.headers['user-id']; 
} 


table.insert(function (context) { 
    context.item._user_id = getUserHeader(context); 
    return context.execute(); 
}); 

:これは単なる一例として、ノードパッケージazure-mobile-apps

を使用している、のは、私はそうのように、上の「挿入」機能を修正したテーブルを持っていたとしましょうテーブルの項目は正しい_user_idとすべてで終わります。

しかし、何らかの理由でgetUserHeaderを非同期にして約束を返さなければならなかったとしましょう(コンテキストを実行する前に、トークンを確認したり、関連するテーブルで何かをチェックしたいかもしれません)。ここでは、上記のコードは、非同期のように見えるかもしれないものです:

function getUserHeader(context) { 
    return new Promise(function(resolve, reject){ 
     resolve(context.req.headers['user-id']); 
    }); 
} 


table.insert(function (context) { 
    getUserHeader(context) 
    .then(function(uid) { 
     context.item._user_id = uid; 
     return context.execute(); 
    })  
}); 

今では1つのレベルで動作します:context.executeは実行しないと、レコードが作成されますない、正しい_user_idで。しかし、クライアントが行ったhttpコールは決して応答を得ません。通常、http応答はcotが(挿入の場合)テーブルに追加された項目で返されますが、ここでは返されません。

簡単なテーブルスクリプトのワークフローに非同期関数を追加する適切な方法は何ですか?

答えて

1

Promise関数を呼び出すと、returnというキーワードを見逃しました。

これは、あなたがそれを変更した場合に動作します:

table.insert(function (context) { 
    return getUserHeader(context).then(function(uid) { 
     context.item._user_id = uid; 
     return context.execute(); 
    })  
}); 
+0

私は家に帰るとき、私はそれをしようとします。私はそれを試みると思った、私はすでに持っていたと思ったが、私は再び試してみる。 – TKoL

関連する問題