arrays - 这是 Svelte 中的 Array push() 的问题还是我做错了什么?
问题描述
我已经为这个问题绞尽脑汁好几个小时了,虽然我找到了解决这个问题的方法,但我根本无法克服它正在发生的事实。我不明白。在承诺处理程序中使用 Array.push() 似乎存在某种问题。我创建了下面的测试代码来演示它,它可以在 Svelte REPL 中重现。我只是做错了什么吗?
<script>
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('foo');
}, 300);
});
let itemsA = [];
let itemsB = [];
const addItem = (item) => {
itemsA[itemsA.length] = item;
itemsB.push(item);
}
const loadItems = (last) => {
addItem("Begin");
myPromise
.then((value) => {
addItem(value);
});
addItem("End");
return true;
};
loadItems();
</script>
<div>Items A: {itemsA}</div>
<div>Items B: {itemsB}</div>
我认为 itemsB.push(item) 应该与 itemsA[itemsA.length] = item 做同样的事情,并且它确实如此,除非从 promise 处理程序内部调用。
我得到以下结果:
Items A: Begin,End,foo
Items B: Begin,End
编辑:我已经消除了作为怪异来源的承诺。下面的代码更简单地说明了这一点。
<script>
let itemsA = [];
let itemsB = [];
const addItem = (item) => {
itemsA[itemsA.length] = item;
itemsB.push(item);
}
const clickHandler = () => {
addItem('click');
}
addItem('load');
</script>
<div>Items A: {itemsA}</div>
<div>Items B: {itemsB}</div>
<button on:click={clickHandler}>Click Me</button>
解决方案
推荐阅读
- c# - Dot NET core 3.1 使用 MapControllerRoute 将参数传递给操作
- android - 如何使用范围存储更新 Android 11 中的媒体存储?
- excel - 如何获取活动 NamedSheetView 类的名称属性?
- c# - 无法通过客户端凭据提供程序流在通道中发送消息 - Microsoft Graph API
- flutter - Flutter IAP 未收到应用内购买付款
- python - 正则表达式在每个特殊字符(除了 \)和任何数字或字母(字母数字)之间添加一个空格。在 a 中隔离 SINGLR 特殊字符
- javascript - 函数 Number() { [native code] } JavaScript 中的错误
- asp.net-core - IConfiguration.GetSection 与 Where 选择器
- r - 在 pivot_wider() 中设置名称顺序
- bash - for循环无法正常工作的问题