2015-11-20 28 views
0

我從流星中的wrapAsync函數獲取返回值時遇到了問題。以下是我的代碼流星從異步函數中獲取值

Template.greet.helpers({ 
    greet : function() { 
    var convertAsyncToSync = Meteor.wrapAsync(HTTP.get); 
    resultOfAsyncToSync = convertAsyncToSync('http://www.demo.com/api/greet', {}); 
    console.log(resultOfAsyncToSync); 
    return resultOfAsyncToSync; 
    } 
}); 

我在控制檯中得到未定義的值。

+0

使用reactiveDict或reactiveVar保存值 – Sasikanth

+0

感謝您的答覆。我嘗試了下面的代碼,但我仍然無法從中得到任何東西。 Template.greet.helpers({ 的greet:函數(){ VAR convertAsyncToSync = Meteor.wrapAsync(HTTP.get); resultOfAsyncToSync = convertAsyncToSync( 'http://www.demo.com/api/greet',功能(錯誤,響應){ alert('response'); console.log(response); return response.data; }); } }); 現在我的反應被打印在控制檯中,但沒有任何返回模板 – Subhash

回答

0

嘗試

Template.greet.onCreated(function(){ 
    this.apiResult = new ReactiveVar(null); 
}) 
Template.greet.helpers({ 
    greet : function() { 
    var t = Template.instance(); 
    HTTP.get('http://www.demo.com/api/greet', {}, function(e,r){ 
     //process response and save it in reactivevar 
     t.apiResult.set(r.data); 
    }); 
    return t.apiResult.get(); 
    } 
}); 

不要忘記補充包meteor add reactive-var

編輯

Template.greet.onRendered(function(){ 
    var t = Template.instance(); 
    HTTP.get('http://www.demo.com/api/greet', {}, function(e,r){ 
    //process response and save it in reactivevar 
    t.apiResult.set(r.data); 
    }); 
}) 

Template.greet.helpers({ 
    greet : function() { 
    var t = Template.instance(); 
    return t.apiResult.get(); 
    } 
}); 
+0

謝謝。有效! – Subhash

+0

自從我的控制檯充滿日誌後,它是否會多次調用HTTP.get函數。 這是我的日誌顯示: Firebug的日誌限制已經達到。未顯示1290個條目。 – Subhash

+0

這取決於你打電話給幫手的次數是多少次 – Sasikanth