如果里面有多个承诺,我怎么知道`eval`执行是否完成

时间:2017-09-26 05:12:07

标签: javascript node.js

我使用eval在nodejs应用程序中将字符串作为javascript代码执行。问题是如果字符串包含多个promise,我不知道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));\
  });\
});\
';

上面的脚本定义了一个包含两个promises的字符串。如果我运行如下代码:

eval(userFind)

eval函数返回而不等待promises。 我怎么知道这两个承诺何时结束?

1 个答案:

答案 0 :(得分:2)

.then()eval()来电。您也可以使用Function构造函数

let fn = `() => 
           new Promise(resolve => 
             setTimeout(resolve, Math.floor(Math.random() * 1200), "resolved"))`;
           
let promiseString = new Function(`return ${fn}`)();

promiseString()
.then(res => console.log(res))
.catch(err => console.error(err));