Javascript 如果“eval”中有多个承诺,我怎么知道“eval”执行是否完成
我使用Javascript 如果“eval”中有多个承诺,我怎么知道“eval”执行是否完成,javascript,node.js,Javascript,Node.js,我使用eval在nodejs应用程序中以javascript代码的形式执行字符串。问题是,如果字符串包含多个承诺,我不知道eval执行是否完成 const userFind = 'function usersFind(db, userAge, userNameLast) {\ const useDb = db.db("test");\ const query = {\ "user.age": { $gt: userAge },\ "user.name.last": use
eval
在nodejs应用程序中以javascript代码的形式执行字符串。问题是,如果字符串包含多个承诺,我不知道eval
执行是否完成
const userFind = 'function usersFind(db, userAge, userNameLast) {\
const useDb = db.db("test");\
const query = {\
"user.age": { $gt: userAge },\
"user.name.last": userNameLast\
};\
const returnData = new Promise(resolve => {\
const arrayData = useDb.collection("users").find(query).limit(1).toArray();\
resolve(arrayData);\
});\
return returnData;\
}\
let results = usersFind(db, 5, "Lee", 1);\
results.then(r => {\
r.forEach(doc => {\
console.log(JSON.stringify(doc));\
});\
});\
results = usersFind(db, 5, "Lee", 1);\
results.then(r => {\
r.forEach(doc => {\
console.log(JSON.stringify(doc));\
});\
});\
';
上面的脚本定义了一个包含两个承诺的字符串。如果我按如下方式运行代码:
eval(userFind)
eval函数在不等待承诺的情况下返回。
我怎么知道这两个承诺什么时候完成了呢?Chain.then()
toeval()
调用。您也可以使用函数
构造函数
让fn=`()=>
新承诺(解决=>
setTimeout(resolve,Math.floor(Math.random()*1200),“resolved”)`;
让promiseString=new函数(`return${fn}`)();
承诺字符串()
.then(res=>console.log(res))
.catch(err=>console.error(err))代码>问题是为什么使用代码作为字符串,然后使用eval
来处理它?第一个解决方案:不要使用eval?我认为只有当eval
中的最后一个语句是promise时,它才会起作用,对吗?您引用的是哪个特定代码?注意,传递给的函数没有返回值。然后()
在usersFind()
calls()处返回值。您的意思是我需要在代码末尾添加返回结果吗?没有可返回的函数。在绳子的末端。预期的结果是什么?我对你的例子感到困惑。您的意思是我需要将您的所有代码复制到字符串中,然后在eval
中运行它吗?