Javascript 在脚本标记中使用承诺不起作用?
下面的代码用于使用承诺在DOM中附加脚本。(以下所有代码都在A-frame技术的iframe内部执行,我的代码是使用Google Blockly[基于块的编码]生成的)Javascript 在脚本标记中使用承诺不起作用?,javascript,reactjs,ecmascript-6,promise,es6-promise,Javascript,Reactjs,Ecmascript 6,Promise,Es6 Promise,下面的代码用于使用承诺在DOM中附加脚本。(以下所有代码都在A-frame技术的iframe内部执行,我的代码是使用Google Blockly[基于块的编码]生成的) export const appendScript=async({ src, 一扇窗户, 代码, 身份证件 }, 博士, 回拨, ) => 新承诺(解决=>{ const startDate=新日期(); 常量脚本=doc.createElement('script'); 如果(src)script.src=src; if(代
export const appendScript=async({
src,
一扇窗户,
代码,
身份证件
},
博士,
回拨,
) =>
新承诺(解决=>{
const startDate=新日期();
常量脚本=doc.createElement('script');
如果(src)script.src=src;
if(代码){
script.text=代码;
}
如果(id){
script.id=id;
}
doc.head.appendChild(脚本);
if(callback)callback();
if(代码){
如果(回调){
回调();
}
console.log(aframeWindow.onGreenPlayButtonClicked,“==”;//当代码字符串包含onGreenPlayButtonClicked fn之外的wait时未定义
解决(“已解决”);
}否则{
script.addEventListener('load',()=>{
const endDate=新日期();
常量秒=(endDate.getTime()-startDate.getTime())/1000;
log('script-loaded:',src,`take${seconds}加载`);
决议(“决议2”);
});
}
});代码>在appendScript
中没有任何内容等待main()
调用返回的承诺。如果异步初始化onGreenPlayButtonClicked
,则在附加脚本元素后,它不会立即可用
我建议你试试
const callAppendScript = async code => {
const CODE_VERSION = aframeWindow.CODE_VERSION;
code = `
async function main(inPlayMode) {
let CURRENT_CODE_VERSION = CODE_VERSION;
${code};
}
// no main() call here
`;
await appendScript({
code,
aframeWindow,
id: 'code'
}, aframeWindow.document);
console.log(aframeWindow.onGreenPlayButtonClicked, "before");
await main();
//^^^^^^^^^^^^
console.log(aframeWindow.onGreenPlayButtonClicked, "after");
}
appendScript
中没有任何内容等待main()
调用返回的承诺。如果异步初始化onGreenPlayButtonClicked
,则在附加脚本元素后,它不会立即可用
我建议你试试
const callAppendScript = async code => {
const CODE_VERSION = aframeWindow.CODE_VERSION;
code = `
async function main(inPlayMode) {
let CURRENT_CODE_VERSION = CODE_VERSION;
${code};
}
// no main() call here
`;
await appendScript({
code,
aframeWindow,
id: 'code'
}, aframeWindow.document);
console.log(aframeWindow.onGreenPlayButtonClicked, "before");
await main();
//^^^^^^^^^^^^
console.log(aframeWindow.onGreenPlayButtonClicked, "after");
}
谢谢,它可以工作了,我必须提高我的技能如果我在OngreenPlayButtonClick中没有使用async怎么办?它是否会提升OngreePlay按钮的功能声明?我以为它会被提升,我可以调用它,但它仍然没有定义,有什么特别的原因吗?@Coderboi问题不在于ongreenplaybuttonclick
中的async
代码,而在于main
中的async
代码本身-具体地说,等待HatchTranslateEngine.translate(`Hello`,'en'))
。谢谢,它很管用,我必须提高我的技能。如果我在OngreenPlayButtonClick中没有使用async,该怎么办?它是否会提升OngreePlay按钮的功能声明?我以为它会被提升,我可以调用它,但它仍然没有定义,有什么特别的原因吗?@Coderboi问题不在于ongreenplaybuttonclick
中的async
代码,而在于main
中的async
代码本身-具体地说,等待HatchTranslateEngine.translate(`Hello`,'en'))
。