我有一個服務,爲API調用,如下圖所示
getValue: function(input) {
var deferred, url;
deferred = $q.defer();
url = "url";
$http.post(url, input).success(function(data, status, headers, config) {
return deferred.resolve({
success: true,
data: data,
status: status,
headers: headers,
config: config
});
}).error(function(data, status, headers, config) {
return deferred.resolve({
success: false,
data: data,
status: status,
headers: headers,
config: config
});
});
return deferred.promise;
}
但這是異步。我如何將它轉換爲同步(我想讓它等到我得到結果)?
這是承諾的目的。使用您從函數返回的承諾來執行您的操作。例如'deferred.promise'返回'.then(function(){/ * your action * /})''。或者,就你的情況而言(因爲它基本上解決了http響應,所以在post中執行你的動作)。 – haki 2014-10-28 08:15:07
我認爲它不可能同步,但你使用承諾,它允許你控制它,你可以告訴你的應用程序等待,直到它將解決/拒絕 – 2014-10-28 08:21:30
可能重複的[如何$ http與AngularJS同步呼叫](http://stackoverflow.com/questions/13088153/how-to-http-synchronous-call-with-angularjs) – 2015-10-02 14:15:19