Если мой сценарий браузера получает доступ к объектам локального хранилища и изменяет их асинхронно в нескольких разных местах (по таймерам, через конечные точки веб-сокетов и т. Д. c.), Возможно ли, что я получу несогласованный / несинхронный c data?
browser.storage.local.get(['jobs']).then(function(storage){
var jobs = storage.jobs
jobs.forEach(function(job, index, array){
if(job.status === 'pending'){
// Do some time consuming work
await some_other_task() // Here, jobs could be overwritten in localStorage elsewhere
jobs[index].status = 'done'
}
}
browser.storage.local.set({jobs})
})
Учтите, что код, аналогичный предыдущему (Манипулирование объектом хранилища jobs
), может все обращаться к объекту одновременно и в итоге писать в jobs
, в то время как один из других выполняет некоторую работу после прочтения и выдачи события l oop. Как я могу предотвратить это?
После поиска я вижу, что многие люди отказываются от использования «Javascript не имеет параллелизма, поэтому это не имеет значения», но это не совсем верно, когда вы можете уступить событие l oop.