我正在尝试使用NodeJS中的开放图形插件来获取藤蔓的预览图像。 OG结果是正确的,但我无法从og回调中访问result [i] - 变量未定义。如何在OG回调中访问result [i]?
Thing.find(function(err, result) {
for (var i = 0; i < result.length; i++) {
if (result[i].attachment) {
if (result[i].attachment.embed_type == 'vine') {
og(result[i].attachment.embed_url, function(err, meta) {
result[i].attachment.preview_image = meta.image;
result[i].save();
});
}
}
}
});
答案 0 :(得分:1)
您需要一个闭包,i
不断更改,因为og
是异步
Thing.find(function(err, result) {
for (var i = 0; i < result.length; i++) {
if ( result[i].attachment &&
result[i].attachment.embed_type == 'vine')
{
(function(res) {
og(res.attachment.embed_url, function(err, meta) {
res.attachment.preview_image = meta.image;
res.save();
});
}(result[i]));
}
}
});
答案 1 :(得分:0)
有一些方法可以解决此问题,例如创建函数。
而且,为了使其更清晰,更容易测试,我还将所有result[n]
逻辑放在另一个函数中。
var process = function(resultItem) {
if (resultItem.attachment && if (resultItem.attachment.embed_type == 'vine')) {
og(resultItem.attachment.embed_url, function(err, meta) {
resultItem.attachment.preview_image = meta.image;
resultItem.save();
});
}
};
Thing.find(function(err, result) {
for (var i = 0; i < result.length; i++) {
process(result[i]);
}
});