我有一个函数可以从JSON文件中获取一些值,并创建一个item
对象。
var searchIndex = [];
function getSearchTerms(param){
var filePath = 'json/' + param + '.json';
$.getJSON(filePath, function( data ) {
var item = {
param: param,
title: data.title,
person: data.fname + ' ' + data.lname
};
// console.log(item);
// searchIndex.push(item);
return item;
});
}
检查控制台时,我可以看到正在创建具有正确属性的item
对象。
但是,当我尝试将对象添加到searchIndex
数组中时,无论是在函数内还是在调用getSearchTerms
函数的循环内,我都会得到具有正确行数的数组,但是所有值都是不确定的。
var contentFiles = [ 'a', 'b', 'c'];
for (var i = 0; i < contentFiles.length; i++) {
searchIndex.push( getSearchTerms(contentFiles[i]) );
}
我在这里做错什么愚蠢的事?预先感谢您的帮助。
答案 0 :(得分:0)
请记住,从磁盘读取文件需要一点时间。数量不多,但是足以弄乱您要编写的少量代码。现在是您学习如何使用异步代码的好时机。这是对某些特定代码行的一些细微改动,可能会有所帮助。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddIdentity<MyUser, IdentityRole>()
.AddUserStore<MyUserStore>()
.AddRoleStore<MyRoleStore>()
.AddDefaultTokenProviders();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseAuthentication();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}
在您的循环中...
async function getSearchTerms(param)
await var item
我不是专家,这是我所回答的第一个SO问题。您可能需要在其中插入.next之类的内容。如果这不起作用,请进一步研究异步/等待功能的概念。在您的代码中,您要推送尚未达到其实际值的对象,因为从磁盘读取需要一些时间。 JS无需等待就可以逐行移动,有时您的值需要一秒钟才能被整理出来。