我使用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。 我怎么知道这两个承诺何时结束?
答案 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));