javascript - Javascript:如何等待评估函数?
问题描述
我正在开发一个从 Blockly 代码块中绘制对象的项目。因此生成一个代码字符串,在下面的函数中进行评估。在使用 eval 函数运行的代码中,所有创建的对象都存储在一个数组(对象)中。我的问题是,在 alert(objects.length) 可以与更新的对象数组一起使用之前,代码没有被完全评估(所以它会在我之前重置数组时警告为零)。所以警报应该等待 eval 函数。你能帮我解决这个问题吗?
function paintFromCode() {
slideTo('konva_box');
setTimeout(function(){
deleteObjects();
let code = Blockly.JavaScript.workspaceToCode(workspace);
try {
code = "let t = 0;" + code;
eval(code);
} catch (e) {
alert(e);
}
layer.add(pospanel);
alert(objects.length);
}, 1000);
}
创建代码的部分函数:
let code = "setTimeout( function() {" +
"objects['" + text_identifier.toUpperCase() + "'] = new Konva.Circle({x: 50, y: 100, radius: 50, fill: '#00ff00'});" +
"layer.add(objects['" + text_identifier.toUpperCase() + "']);" +
"layer.draw();" +
"}, speed * t);" +
"t = t + 1;";
return code;
解决方案
我有同样的问题,这就是我如何处理它
try {
eval("(async () => {"+code+"})()");
}
catch (e) {
alert(e);
}
并且代码在 myArr1 中按功能拆分,并且在我添加的每个功能之后
let wait='); await this.waitfunction(500);';
for (var i=0; i<myArr1.length-1;i++){
let tex=
myArr1[i].concat(wait);
b[i]=tex;
}
这是我的等待函数():
waitfunction(ms){
return new Promise(resolve => {
setTimeout(()=>resolve(''),ms)
});
}
我知道这很长,但它有效
推荐阅读
- visual-studio-community - 如何在“Visual Studio For Mac 社区”上将项目作为 Web 应用程序打开
- spring - 在运行时设置@Table Spring
- java - 将字符添加到列表时跳过空格
- ios - 目标 C:使用 NSLayoutConstraint 居中
- scala - spark-shell“错误:类型不匹配”使用 :paste 定义类/伴侣对象
- jquery - 基于元素参数化jQuery验证消息
- python - 使用 matplotlib 绘制圆圈时出错
- node.js - 如何自定义远程api调用?
- node.js - 如何清理包括复杂对象在内的所有身体参数
- r - 从 OSX 终端运行 R Shiny 应用程序