chrome拡張を作っています。chrome拡張に固有の問題ではないので題名にはChrome拡張とは書いていません。
やりたいこと
onMessage.addListenerでメッセージを受けて、第三引数のcallbackで返信したいのですが、返信したい変数がObject.definePropertyで監視している変数で、onMessage.addListenerとObject.definePropertyはどちらが先に実行されるか保証されていないため、addListenerのcallback内にdefinePropertyをじかに書いてしまうわけにいかず、こまっています。
chrome.runtime.onMessage.addListener((msg, sender, callback) => { if(msg.hoge){ callback(ids.foo) } })
Object.defineProperty(ids, 'datas', { get : () => this.datas, set : newValue => { let name = Object.keys(newValue)[0] this.datas[name] = newValue[name] let g = this.datas; if([g.foo,g.bar,g.fizz].every(x => !x)){ chrome.runtime.sendMessage(g.for, {'id':g.bar}) this.datas = {} } } })
やったこと
Promise.allが使えるかと思いましたが、undefinedになてしまいます。
setTimeout(() => {//chrome.runtime.onMessage.addListenerの代わり function p_wrapper(){ return new Promise(r => { r({'foo':'bar'}) }) } }, 5000) function p_wrapper2(){ return new Promise(r => { //Object.defineProperty(ids~~~ r('hoge') }) } Promise.all([p_wrapper, p_wrapper2]).then(msg => {console.log(msg)}) // p_wrapper is not defined
Object.definePropertyも広く言えばイベントリスナのようなものだと思いますが、イベントリスナを入れ子にする必要のある場合どう対処したらよいでしょうか?
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。