2017-09-26 24 views
0

我正在使用eval在nodejs應用程序中執行一個字符串作爲javascript代碼。問題是如果字符串包含多個promise,我不知道eval執行是否完成。如何知道`eval`執行是否完成,如果裏面有多個promise

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));\ 
    });\ 
});\ 
'; 

上面的腳本定義了一個字符串包含兩個promise。如果我運行下面的代碼:

無需等待承諾

eval(userFind)

eval函數返回。 我怎麼知道兩個承諾何時完成?

+4

問題是,爲什麼使用代碼字符串,然後使用'eval'來處理呢? – Rajesh

+1

第一個解決方案:不使用eval? –

回答

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));

+0

我認爲它只有在'eval'中的最後一條語句是承諾纔有效,對吧? –

+0

你引用了哪些特定的代碼?請注意,函數不會返回值,它會傳遞給位於'usersFind()'調用'.then()'的調用 – guest271314

+0

您的意思是我需要在代碼的末尾添加'return results'? –

相關問題