gpt4 book ai didi

asynchronous - Meteor - 将异步函数返回到 Handlebars 模板?

转载 作者:行者123 更新时间:2023-12-04 14:02:15 26 4
gpt4 key购买 nike

我正在尝试根据 Flickr API 调用生成 Flickr url,然后将该结果返回到 handlebars.js 模板。我正在努力寻找解决异步流程的方法。

我已经尝试创建一个回调函数,但我仍然不确定如何将定义的对象或变量放入 HTML 模板中。

下面是 Flickr API 函数的代码:

var FlickrRandomPhotoFromSet = function(setID,callback){
Meteor.http.call("GET","http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key="+apiKey+"&photoset_id="+setID+"&format=json&nojsoncallback=1",function (error, result) {
if (result.statusCode === 200)
var photoResult = JSON.parse(result.content);
var photoCount = photoResult.photoset.total;
var randomPhoto = Math.floor((Math.random()*photoCount)+1);
var selectedPhoto = photoResult.photoset.photo[randomPhoto];
var imageURL = "<img src=http://farm"+selectedPhoto.farm+".staticflickr.com/"+selectedPhoto.server+"/"+selectedPhoto.id+"_"+selectedPhoto.secret+"_b.jpg/>";
FlickrObject.random = imageURL;
}
if (callback && typeof(callback)==="function") {
callback();
}
});};

我的模板代码是这样的:
Template.backgroundImage.background = function(){
FlickrRandomPhotoFromSet(setID,function(){
return FlickrObject;
});
};

但这仍然让我卡住了,无法将定义的对象放入我的 HTML,其编码如下:
<template name="backgroundImage">
<div id="background">
{{random}}
</div>

最佳答案

使用 Session作为中介。它是 react 性的,因此一旦设置,它将使用新数据更改模板:

Template.backgroundImage.background = function(){
return Session.get("FlickrObject");
};

Template.backgroundImage.created = function() {
FlickrRandomPhotoFromSet(setID,function(){
Session.set("FlickrObject", FlickrObject)
});
}

所以 created方法将在创建模板时运行以运行 FlickrRandomPhotoFromSet ,当返回结果时,它将设置 session 哈希,一旦接收到结果,它将设置背景。

小心您的 FlickrRandomPhotoFromSet我也没有注意到你对 FlickrObject 有争论传递给回调。

关于asynchronous - Meteor - 将异步函数返回到 Handlebars 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16632050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com