Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果“eval”中有多个承诺,我怎么知道“eval”执行是否完成_Javascript_Node.js - Fatal编程技术网

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()
to
eval()
调用。您也可以使用
函数
构造函数

让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
中运行它吗?