来自导入数组的JavaScript随机项行为异常
以下代码的行为似乎很奇怪。基本上,我从一个文本文件中导入一系列行分隔的句子,然后将它们组成一个数组。但是当我尝试从数组中选择一个随机句子时,它不起作用,因为sentenceString没有定义 然而,当我跑的时候 数学地板(数学随机()*(句子长度)+1); 我得到了一个很好的随机数 当我跑完句子的长度 我得到了数字12,这确实是长度 我错过了什么来自导入数组的JavaScript随机项行为异常,javascript,arrays,random,Javascript,Arrays,Random,以下代码的行为似乎很奇怪。基本上,我从一个文本文件中导入一系列行分隔的句子,然后将它们组成一个数组。但是当我尝试从数组中选择一个随机句子时,它不起作用,因为sentenceString没有定义 然而,当我跑的时候 数学地板(数学随机()*(句子长度)+1); 我得到了一个很好的随机数 当我跑完句子的长度 我得到了数字12,这确实是长度 我错过了什么 var sentenceArr = []; $.get('sentences.txt', function(data){
var sentenceArr = [];
$.get('sentences.txt', function(data){
sentenceArr = data.split('\n');
});
var rand = Math.floor(Math.random() * (sentenceArr.length) + 1);
var sentenceString = sentenceArr[rand];
var sentence = sentenceString.split(' ');
更新:
我试着按照下面的建议做出一个承诺,但它似乎仍然不起作用。我的带有Promise的新代码如下所示:
var sentenceArr = [];
var done = false;
function loadSentences() {
var rand = Math.floor(Math.random() * (sentenceArr.length) + 1);
var sentenceString = sentenceArr[rand];
var sentence = sentenceString.split(' ');
};
$.get('/sentences.txt', function(data){
sentenceArr = data.split('\n');
done = true;
});
var isItDone = new Promise(function(resolve) {
if(done) {
resolve('it worked');
}
});
//consume the promise:
var checkIfDone = function() {
isItDone
.then(function (fulfilled) {
loadSentences();
})
.catch(function (error) {
console.log('oops, it failed');
});
};
checkIfDone();
这似乎总是返回“哎呀,它失败了”,好像承诺从未兑现。但是,当我检查“done”的值时,它是“true”,这意味着Ajax请求在进入下一步之前已经完成。有谁能启发我吗?我已经阅读了三篇关于承诺的教程,但似乎无法找出将这个概念应用到我自己的代码中的错误。谢谢。问题是您试图在服务器响应完成之前处理文件内容 看看承诺,了解更多 以及使用jquery ajax api解决问题的方法
var sentenceArr = [];
var file = 'path/to/file';
$.get(file)
.done(function (data) {
sentenceArr = data.split('\n');
var rand = Math.floor(Math.random() * (sentenceArr.length) + 1);
var sentenceString = sentenceArr[rand];
var sentence = sentenceString.split(' ');
console.log(sentenceArr)
console.log(rand)
console.log(sentenceString)
console.log(sentence)
});
谢谢,我解决了这个问题,首先将所有内容包装到一个函数中,然后使用.then()在Ajax“get”完成后运行所有内容:
var sentenceArr = [];
常量getData=()=>
$.get(“”,函数(数据){
})) 生成的随机数是多少?它在0-11范围内吗?谢谢,我试过你的代码,但仍然返回“未定义”的句子。我也读了一些关于承诺的书(感谢你的链接),并且做出了这样一个承诺:
})
.then(data => { // use this format to run function only after json get is done (since it's async)
// "data" is the contents of the text file
sentenceArr = data.split('\n');
console.log('Made sentence array');
loadSentences();