angularjs获得承诺的歌曲

时间:2016-03-04 15:11:25

标签: javascript angularjs ajax promise

我使用$http.post().success().error();

将数据发送到带有JSON对象的服务器

来自服务器的响应返回一个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)
            };

        }

0 个答案:

没有答案