如何在Angular.JS中使用流式JSON?

时间:2014-02-27 17:16:01

标签: javascript json angularjs stream streaming

我有一个函数createDB,它绑定到控制器中的作用域,代码如下:

功能:

function createDB(resource, args, scope, database, server, script_bool) {
    // Creates a new database with the name in the database argument
    args.name = database;
    args.script = script_bool;
    scope.success = null;
    scope.loadingResponse = true;

resource('http://localhost:1000/apiv1/servers/:server/databases',
    {server: server}, {create: {method: 'POST', params: args,
    transformResponse: function(data){return data}}})
    .create(args).$promise.then(function (result) {
        console.log(JSON.stringify(result))
        console.log(result);
        })
}

控制器绑定:

$scope.createDB = function (database){createDB($resource,
    $scope.args, $scope, database, serverTools.getName(),
    $scope.scripts);};

$scope.argsserverTools.getName()$scope.scripts是在HTML方面设置的变量。

目前我只是记录事物,但将来我希望能够提供关于创建过程如何进行的状态更新。为此,每当创建数据库时,我都会从API中流式传输一系列换行的JSON对象。它们看起来像这样:

{"progress": "1" "verbose": "Start" "success": true}\n
{"progress": "50" "verbose": "Database Created Successfully" "success": true}\n
{"progress": "100" "verbose": "CAD scripts for __test_create run successfully" "success": true}\n
{"progress": "complete" "statuses": ["progress": "50" "verbose": "Database Created Successfully" "success": true "progress": "100" "verbose": "CAD scripts for __test_create run successfully" "success": true] "verbose": "Complete" "success": true}

一旦操作完成,就会发送JSON。目标是将它们挂钩到加载栏,以便用户知道过程的进展情况。理想情况下,服务会不断更新加载栏,直到收到“进度”为“完成”的响应,此时它会检查整体成功值并相应地为加载栏着色。

我并不担心设置加载栏。我遇到的问题是解析JSON。console.log(result);只给我第一个JSON对象({"progress": "1" "verbose": "Start" "success": true}),而console.log(JSON.stringify(result));给我一个乱七八糟的东西,我会包括在底部。我也不想等到一切都返回后,我需要在第一个JSON对象到达时立即开始更新范围。

我想知道的是:在Angular.js中从RESTful API接收流数据的最佳实践是什么,我该如何实现?或者我应该使我的API函数更小,并放弃流式传输以支持多个HTTP请求?

以下是JSON.stringify(request)结果:

[11:46:17.812] "{"0":"{","1":"\"","2":"p","3":"r","4":"o","5":"g","6":"r","7":"e","8":"s","9":"s","10":"\"","11":":","12":" ","13":"\"","14":"1","15":"\"","16":",","17":" 
","18":"\"","19":"v","20":"e","21":"r","22":"b","23":"o","24":"s","25":"e","26":"\"","27":":","28":" 
","29":"\"","30":"S","31":"t","32":"a","33":"r","34":"t","35":"\"","36":",","37":" 
","38":"\"","39":"s","40":"u","41":"c","42":"c","43":"e","44":"s","45":"s","46":"\"","47":":","48":" 
","49":"t","50":"r","51":"u","52":"e","53":"}","54":"\n","55":"{","56":"\"","57":"p","58":"r","59":"o","60":"g","61":"r","62":"e","63":"s","64":"s","65":"\"","66":":","67":" 
","68":"\"","69":"5","70":"0","71":"\"","72":",","73":" ","74":"\"","75":"v","76":"e","77":"r","78":"b","79":"o","80":"s","81":"e","82":"\"","83":":","84":" 
","85":"\"","86":"D","87":"a","88":"t","89":"a","90":"b","91":"a","92":"s","93":"e","94":" ","95":"C","96":"r","97":"e","98":"a","99":"t","100":"e","101":"d","102":" 
","103":"S","104":"u","105":"c","106":"c","107":"e","108":"s","109":"s","110":"f","111":"u","112":"l","113":"l","114":"y","115":"\"","116":",","117":" 
","118":"\"","119":"s","120":"u","121":"c","122":"c","123":"e","124":"s","125":"s","126":"\"","127":":","128":" 
","129":"t","130":"r","131":"u","132":"e","133":"}","134":"\n","135":"{","136":"\"","137":"p","138":"r","139":"o","140":"g","141":"r","142":"e","143":"s","144":"s","145":"\"","146":":"
,"147":" ","148":"\"","149":"1","150":"0","151":"0","152":"\"","153":",","154":" 
","155":"\"","156":"v","157":"e","158":"r","159":"b","160":"o","161":"s","162":"e","163":"\"","164":":","165":" ","166":"\"","167":"C","168":"A","169":"D","170":" 
","171":"s","172":"c","173":"r","174":"i","175":"p","176":"t","177":"s","178":" ","179":"f","180":"o","181":"r","182":" 
","183":"_","184":"_","185":"t","186":"e","187":"s","188":"t","189":"_","190":"c","191":"r","192":"e","193":"a","194":"t","195":"e","196":" ","197":"r","198":"u","199":"n","200":" 
","201":"s","202":"u","203":"c","204":"c","205":"e","206":"s","207":"s","208":"f","209":"u","210":"l","211":"l","212":"y","213":"\"","214":",","215":" 
","216":"\"","217":"s","218":"u","219":"c","220":"c","221":"e","222":"s","223":"s","224":"\"","225":":","226":" 
","227":"t","228":"r","229":"u","230":"e","231":"}","232":"\n","233":"{","234":"\"","235":"p","236":"r","237":"o","238":"g","239":"r","240":"e","241":"s","242":"s","243":"\"","244":":"
,"245":" ","246":"\"","247":"c","248":"o","249":"m","250":"p","251":"l","252":"e","253":"t","254":"e","255":"\"","256":",","257":" 
","258":"\"","259":"s","260":"t","261":"a","262":"t","263":"u","264":"s","265":"e","266":"s","267":"\"","268":":","269":" 
","270":"[","271":"{","272":"\"","273":"p","274":"r","275":"o","276":"g","277":"r","278":"e","279":"s","280":"s","281":"\"","282":":","283":" 
","284":"\"","285":"5","286":"0","287":"\"","288":",","289":" ","290":"\"","291":"v","292":"e","293":"r","294":"b","295":"o","296":"s","297":"e","298":"\"","299":":","300":" 
","301":"\"","302":"D","303":"a","304":"t","305":"a","306":"b","307":"a","308":"s","309":"e","310":" ","311":"C","312":"r","313":"e","314":"a","315":"t","316":"e","317":"d","318":" 
","319":"S","320":"u","321":"c","322":"c","323":"e","324":"s","325":"s","326":"f","327":"u","328":"l","329":"l","330":"y","331":"\"","332":",","333":" 
","334":"\"","335":"s","336":"u","337":"c","338":"c","339":"e","340":"s","341":"s","342":"\"","343":":","344":" ","345":"t","346":"r","347":"u","348":"e","349":"}","350":",","351":" 
","352":"{","353":"\"","354":"p","355":"r","356":"o","357":"g","358":"r","359":"e","360":"s","361":"s","362":"\"","363":":","364":" 
","365":"\"","366":"1","367":"0","368":"0","369":"\"","370":",","371":" 
","372":"\"","373":"v","374":"e","375":"r","376":"b","377":"o","378":"s","379":"e","380":"\"","381":":","382":" ","383":"\"","384":"C","385":"A","386":"D","387":" 
","388":"s","389":"c","390":"r","391":"i","392":"p","393":"t","394":"s","395":" ","396":"f","397":"o","398":"r","399":" 
","400":"_","401":"_","402":"t","403":"e","404":"s","405":"t","406":"_","407":"c","408":"r","409":"e","410":"a","411":"t","412":"e","413":" ","414":"r","415":"u","416":"n","417":" 
","418":"s","419":"u","420":"c","421":"c","422":"e","423":"s","424":"s","425":"f","426":"u","427":"l","428":"l","429":"y","430":"\"","431":",","432":" 
","433":"\"","434":"s","435":"u","436":"c","437":"c","438":"e","439":"s","440":"s","441":"\"","442":":","443":" 
","444":"t","445":"r","446":"u","447":"e","448":"}","449":"]","450":",","451":" 
","452":"\"","453":"v","454":"e","455":"r","456":"b","457":"o","458":"s","459":"e","460":"\"","461":":","462":" 
","463":"\"","464":"C","465":"o","466":"m","467":"p","468":"l","469":"e","470":"t","471":"e","472":"\"","473":",","474":" 
","475":"\"","476":"s","477":"u","478":"c","479":"c","480":"e","481":"s","482":"s","483":"\"","484":":","485":" 
","486":"t","487":"r","488":"u","489":"e","490":"}","$promise":{},"$resolved":true}"

0 个答案:

没有答案