Javascript browser.storage.local и асинхронная блокировка - PullRequest
0 голосов
/ 26 мая 2020

Если мой сценарий браузера получает доступ к объектам локального хранилища и изменяет их асинхронно в нескольких разных местах (по таймерам, через конечные точки веб-сокетов и т. Д. 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.

...