私は、AppleにverifyReceiptsと話すアプリを書いています。彼らはあなたが投稿できるサンドボックスとプロダクションの両方のURLを持っています。ネストされた約束できれいなコードを書く
21007のステータスを受け取った場合は、Appleと通信するとき、サンドボックスに投稿する必要があるときにプロダクションURLに投稿したことを意味します。
私はリトライロジックを容易にするためのコードを書きました。ここに私のコードの簡易版です。
var request = require('request')
, Q = require('q')
;
var postToService = function(data, url) {
var deferred = Q.defer();
var options = {
data: data,
url: url
};
request.post(options, function(err, response, body) {
if (err) {
deferred.reject(err);
} else if (hasErrors(response)) {
deferred.reject(response);
} else {
deferred.resolve(body);
}
});
return deferred.promise;
};
exports.verify = function(data) {
var deferred = Q.defer();
postToService(data, "https://production-url.com")
.then(function(body) {
deferred.resolve(body);
})
.fail(function(err) {
if (err.code === 21007) {
postToService(data, "https://sandbox-url.com")
.then(function(body){
deferred.resolve(body);
})
.fail(function(err) {
deferred.reject(err);
});
} else {
deferred.reject(err);
}
});
return deferred.promise;
};
を確認する機能でリトライ部分は、ネストされた約束を読んでかなり醜いと困難です。これを行うより良い方法はありますか?
ひとつのアイデアは、(/待ってC#の非同期に類似)継続渡しのための構文をサポートしているアイスのCoffeeScriptを使用しています:http://maxtaco.github.io/coffee-script /。残念なことに、これはCoffeeScriptとそれをサポートしていない "非標準的な"変種を使用する必要があります。 – millimoose