2024-01-03 12:58:24
たぶん、こう…!
生成されるJavascriptを見た感じでは特定の条件におけるバグを踏んだように思います。
・asyncFn===trueでマークされる、非同期な命令を使用している ・pure!==falseでマークされる、変数への参照・設定を含む可能性のある命令を使用している ・その命令を呼び出しているスコープにローカル変数が存在する AWAIT実行は前2つの条件を満たしてます。 この3つの条件が揃うと、この命令の行が非同期の待機なしで実行されます(バグだと思われる)。 (「それ」への代入も非同期になってます) そのため、「その」への代入が遅れて、1つまえの「その」が見えているのだと思います。 「その」を介さずAWAIT実行の行でspに代入した場合、awaitで待つべきPromiseが代入されます。 どちらの場合も期待したようになりません。 なお、spにPromiseを入れたケースでそのPromiseをユーザ関数から戻り値とした場合は、ユーザ関数の呼び出しにawaitが付くので呼び出し元では内容が取り出せます。 王道としてはバグが修正されるのを待つことになると思います。 解読に時間がかかりました(ことばがむずかしかった) > なお、spにPromiseを入れたケースでそのPromiseをユーザ関数から戻り値とした場合は、ユーザ関数の呼び出しにawaitが付くので呼び出し元では内容が取り出せます。 つまり、こう…! //---------------------- file = 「spines/spineboy.json」 sp=SPINEテスト(file)//③ユーザ関数の呼び出しにawaitが付くので spをコンソール表示//④呼び出し元では内容が取り出せます。 sp["spineData"]["animations"][0]["name"]を言う //⑤→death ●SPINEテスト(ファイル名) AAA=『 (async function (ファイル名) { return new Promise((resolve, reject) => { const app = new PIXI.Application({width: 800,height: 600}); document.body.appendChild(app.view);//キャンバスを置く const loader = PIXI.loader loader.add('spd', ファイル名); loader.load( (loader,res) => { var sp = new PIXI.spine.Spine(res.spd.spineData);//リソースをspineに変換 sp.y = 600; sp.x = 400; sp.state.setAnimation(0, sp.spineData.animations[6].name, true); app.stage.addChild(sp);//キャンバスに追加 console.log(sp);//spineのデータが表示される resolve(sp);//なでしこ3の変数に戻したい }) }) }) 』をJS実行 sp=AAAを[ファイル名]でAWAIT実行//①spにPromiseを入れたケースで spを戻す//②そのPromiseをユーザ関数から戻り値とした場合は |