我使用$http.post().success().error();
来自服务器的响应返回一个id,这是一个数字(例如:51)
我收到ID后,我正在向服务器发出另一个请求。这次数据是我从之前的http调用获得的id。
第二个http调用看起来像这样:$http.get(data= Song_ID ).success().error();
服务器的响应有一个res.data.url
字符串,
但是服务器做的是当第一个http调用触发时,服务器正在创建一个简短的音乐样本。此操作当然需要一些时间,因此在此期间服务器会发回正在创建的歌曲的ID
有那个id。我想询问服务器是否已经完成创建歌曲
如果res.data.url
包含一个字符串,则表示该歌曲已准备就绪,如果没有,则该操作仍然有效。
我如何知道操作何时完成?
现在,我正在做一个间隔,每秒发送一个带有歌曲ID的http调用,我正在做if(res.data.url) { console.log('i have a url for you') }
但是间隔发送大量的ajax调用对我来说似乎不对。 有更好的方法吗?
我应该使用有角度的承诺吗?
以下是它的样子:
function getId() {
// first post to server
var postToServer = function () {
var song_id; // song id
// response first time
var onComplete = function (res) {
song_id = res.data.id;
getMySong(song_id); old stuff
// $location.path("/converting");
return res.data.id;
};
// error first time
var onError = function (res) {
console.log(res);
};
var song_params = songdata.getData()["answers"].toString();
console.log(songdata.getData()["params"]);
var req = {
method: 'POST',
url: 'myserver',
headers: {
'Content-Type': 'application/json'
},
data: angular.toJson({params: "1,1,1,1,1,1"})
};
(function () {
$http(req).then(onComplete, onError);
})();
};
return postToServer();
}
function getMySong(id) {
var interval; // interval
//here is that interval that checks for url
(function () {
interval = $interval(function () {
getUrlSong(id);
}, 1000);
})();
// song url response
var onResSong = function (res) {
console.log(res);
if (res.data.url) {
$interval.cancel(interval);
//$window.location.href = res.data.url;
window.songURL = res.data.url;
songUrl(res.data.url);
}
};
// song url response error
var onErrorSong = function (res) {
console.log(res);
};
// fetch song with the id
var getUrlSong = function (id) {
$http.get('myserver' + id).then(onResSong, onErrorSong)
};
}