複数のajax呼び出しを呼び出していますが、コードはすべてのajax呼び出しが実行された後にのみAPIに到達します。
Javascript:
function test = function(){
var entity = {};
entity.Number = 1;
appFactory.testPostCall(entity, 'ApiController/TestMethod');
entity.Number = 2;
appFactory.testPostCall(entity, 'ApiController/TestMethod');
}
AppFactory
factory.testPostCall = function (number, appendUrl) {
var q = $q.defer();
$http({
method: "POST",
url: url + appendUrl,
data: number
}).success(function (data, status, headers, config) {
q.resolve(data);
}).error(function (data, status, headers, config) {
q.reject(data);
});
return q.promise;
}
API
[HttpPost]
public Nullable<int> TestMethod(TestEntity entity)
{
return entity.Number;
}
ブレークポイントで実行をコーディングする方法をトレースしました。test()関数を呼び出すと、以下が実行されます。
javascript -> appFactory
javascript -> appFactory
API
API
//with the parameter Entity having the value Entity.Number = 2 for both API calls.
ブレークポイントをに配置してみました
entity.Number = 2;
APIが呼び出されるまで待ちますが、コードはAPIが呼び出されるまで関数が終了するのを待っているようです。私はこれの振る舞いについてとても混乱しています、私は実際に次のようなものを期待しています:
javascript -> appFactory -> API //entity.Number = 1
javascript -> appFactory -> API //entity.Number = 2
チェーンはうまく機能しますが、両方を独立して実行する必要があり、何が起こっているのかを本当に理解したいと思います。
entity.Number = 1;
appFactory.testPostCall(entity, 'ApiController/TestMethod')
.then(function(data){
entity.Number = 2;
appFactory.testPostCall(entity, 'ApiController/TestMethod');
});
ありがとうございました!!!
あなたはentity
両方の推測であなたの関数に渡しています。何だと思う?JSでは、すべてのオブジェクトはコピーではなく参照によって渡されます。同様の質問がSO全体にあります。何か他のものを割り当てるときに、このオブジェクトが参照によって渡されないのはなぜですか?
期待する動作をするための2つの可能性があります。
ただし、個人的には3番目のオプションに進みます。これは、オブジェクトをAPIに盲目的に渡さないことです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加