gpt4 book ai didi

javascript - 将 Node.js 应用程序部署到 heroku 时出现 Async.times 错误(重复循环)

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

我有一个网络应用程序,它使用 JavaScript、jQuery 和 async.times(以及其他组件)从 Spotify API 获取艺术家和歌曲列表,并将它们按顺序插入到页面中。在我的本地 Node.js 服务器上,此功能完美运行。但是,在部署到 Heroku 时,似乎存在涉及异步函数的错误,因为它似乎运行了两次循环并追加了两次列表。

这是将数据附加到页面的代码:

var counter = 0;
for (var id in relatedArtists) {
relatedArtists[counter] = relatedArtists[id];
delete relatedArtists[id];
counter++;
}
async.times(counter, function(n, next) {
console.log(n);
console.log(relatedArtists[n].id);
s.getArtistTopTracks(relatedArtists[n].id, "US", function (err, data2) {
relatedArtists[n].song = data2.tracks[0].name;
relatedArtists[n].uri = data2.tracks[0].uri;
$('#related-artist').append(
'<p><strong>' + relatedArtists[n].name + '</strong> -- \"' +
relatedArtists[n].song + '\"</p>'
);
next(null, relatedArtists[n].uri);
});
},

部署的版本在这里:http://whatshouldilistentotoday.herokuapp.com/finalproject/

Heroku 说这对他们来说应该不是问题,因为他们在 ubuntu 上使用普通 Node.js 安装,但我不明白为什么 async.times 会运行在本地但不在其服务器上的适当次数。

最佳答案

您正在循环中的对象上创建属性,该循环会删除该对象的所有属性。

这是自讨苦吃。来自 the spec :

If new properties are added to the target object during enumeration, the newly added properties are not guaranteed to be processed in the active enumeration.

所以不要这样做,它完全取决于实现。如果这进入无限循环并挂起您的服务器,我不会感到惊讶。

为了你自己的理智,只需使用两个单独的对象。除此之外,我根本看不出有任何理由使用这些整数 counter 属性,只需使用 async.forEachOfSeries 即可。而不是 .times 方法。

关于javascript - 将 Node.js 应用程序部署到 heroku 时出现 Async.times 错误(重复循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298599/

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