当字符串包含 Promise 或 async-await 函数时,eval() 不会等待函数执行并返回值

问题描述 投票:0回答:0

作为构建执行用户文本输入的客户端文本编辑器的一部分, 它创建一个输入表单并等待提交事件然后返回值以继续进一步执行


function input(string) {
    let id = string.replace(/ /g,'')

    const inputForm = `<form id=${id}><input placeholder=${string} type="text" name="data"></form>`
    $('#preview').append(inputForm)
    
    addInputDesk(id).then(e=>{
        console.log(e)
        return e 
    })
}   

function addInputDesk(id){
    return new Promise ((resolve, reject)=>{
        let element = document.getElementById(id)

        element.addEventListener("submit",(e)=>{
            e.preventDefault()

            console.log("got the value")
            resolve(e.target.data.value)
    
        }, {once : true})
    })
}

然后将所有字符串传递给

eval()
eval("input('Enter your js code')")

但是

eval()
甚至在输入之前就开始执行了。 我知道在 eventListener 中使用
eval()
很容易,但它是 javascript 的 jupyter notebook 替代品。

有时用户可以输入

let x = 10
console.log(input(x+1))

所以需要这样执行

eval("let x = 'hello'; console.log(input(x))")

所以我面临的主要问题是

eval()
在输入之前就已经执行了。

我希望

eval()
new Function()()
等待异步等待函数的值

javascript async-await eval
© www.soinside.com 2019 - 2024. All rights reserved.