每次通过循环存储随机顺序的数组
Array storing random order each time through loop
我正试图将多个对象存储到一个数组中,然后按顺序渲染出。
我的流程如下:
app.js
var allOdds = [];
var count = 0;
// =====================================
/* Database Config and Error Handling */
// =====================================
tools.databaseConnect();
// Get option number from database
connection.query("SELECT * FROM OptionNumbers ORDER BY id", function(err, rows, fields) {
console.log("CALL FROM DATABASE");
var totalRows = rows.length;
rows.forEach(function(key, value) {
request('http://url/for/data' + key.number, function(error, response, body) {
if (!error && response.statusCode == 200) {
// Parse XML response
if (body.includes('selection')) {
var odds1 = $(body).find('selection').eq(0).attr('odds');
var odds2 = $(body).find('selection').eq(1).attr('odds');
var obj = {
team1odds: odds1,
team2odds: odds2
};
allOdds.push(obj);
} else {
var obj = {
team1odds: 0.00,
team2odds: 0.00
};
allOdds.push(obj);
}
if ((count + 1) === totalRows) {
// Render index with results
res.render('index', {
title: 'Best Bets',
time: tools.DisplayCityTime('+12'),
completeOdds: allOdds
});
}
count++;
} //end if || Nothing Odds Found
});
});
});
数据库中"key.number"的顺序是一致的,但存储对象的过程的顺序似乎是随机的?
<% completeOdds.forEach(function(sortedOdds) { %>
<div class="rowContainer" style="width:500px; padding:20px; margin-bottom:20px; border:2px solid grey;">
<p style="width:50%; float:left;">
<%= sortedOdds.team1odds %>
</p>
<p style="width:50%; float:left;">
<%= sortedOdds.team2odds %>
</p>
<div style="clear:both; width:100%;"></div>
</div>
<% }); %>
呈现的结果顺序是随机的,例如下面的示例1-3-2、3-1-2等…
我想从API检索。然后将每个存储到一个数组中,按照检索顺序在页面上呈现。
问题是您无法确定哪个请求以何种顺序得到满足。想象一下,在单独的选项卡中一个接一个地加载三个单独的网页。无法保证它们会按照您打开它们的顺序完成加载。
使用javascript promise是解决这一问题的一种方法。我创建了一个名为promises
的空数组。对于每个请求,您都会创建一个新的Promise。此承诺将根据request(...)
的结果"解决"或"拒绝"。这个promise现在按照您想要的顺序被推送到数组promises
。
一旦数组中的所有promise都被解析,Promise.all(promises)
就会被解析。它的解析值将是一个数组,其中包含以前请求中的解析值。
var promises = [];
rows.forEach(function (key, value) {
var p = new Promise(function (resolve, reject) {
request("...", function (error, response, body) {
if (error) {
//handle error
} else {
resolve(body);
}
});
});
promises.push(p);
});
//this function will not be called until all requests have returned
Promise.all(promises).then(function (resp) {
//these will be in order
console.log(resp[0]);
console.log(resp[1]);
console.log(resp[2]);
});
相关文章:
- 使用JS按顺序显示图像,而不是随机显示
- 如何随机显示列表项的顺序
- 我应该怎么做才能将这个数组从随机更改为在页面刷新时按顺序显示
- Javascript从数组中随机选择并按字母顺序排列
- Javascript - 如何按顺序从数组中挑选随机元素
- 按随机顺序对元素进行动画处理
- Javascript测试-使用Array.prototype以随机顺序显示选项
- 以随机顺序显示 ng 重复项目
- 以随机顺序定位和循环对象
- 拉斐尔随机顺序显示物体
- 如何使用 Jquery 获取 XML 文件,并在每次加载时以随机顺序显示元素一次
- 异步node.js中的随机顺序
- 返回表单提交中列表项的随机顺序
- Javascript幻灯片以随机顺序显示
- 按随机顺序禁用按钮,Rails/javascript
- 数组保持以随机顺序输出- Push
- Android web视图以随机顺序加载javascript/不加载
- 每次通过循环存储随机顺序的数组
- 为什么它以随机顺序初始化这个 Knockout.js 组件
- 为大范围整数生成随机顺序的聪明方法