1 回答

TA貢獻1900條經驗 獲得超5個贊
由于您正在等待回調的結果,我建議Promise從您的getElements函數返回一個 new以及您resolve()在回調中收到的值。然后,當您調用 時getElements,您將需要解決該問題Promise或使用該await符號。該函數將在該點停止并等待Promise解決,但事件循環仍將繼續。有關更多信息,請參閱一些文檔。
我將在下面編寫一個示例,說明使用 aPromise時您的代碼可能是什么樣子,但是當您調用 時getElements,您需要將關鍵字放在await它之前。如果你想避免這種情況,你可以在你進入時解析PromisefromobjectCollector并從它的定義中getElements刪除async關鍵字,但你真的不應該妨礙異步 JavaScript。此外,您可能可以稍微縮短代碼,因為objectCollector在此示例中看起來像是一個不必要的函數:
const glob = require('glob')
const yamlMerge = require('yaml-merge')
const sleep = require('system-sleep')
let xpath
class Page {
function async getElements(elementId) {
function objectCollector() {
return new Promise((resolve,reject) => {
glob('tests/wdio/locators/*.yml', function (er, files) {
if (er) reject(er)
resolve(yamlMerge.mergeFiles(files))
})
})
}
let xpath = await objectCollector()
return xpath[elementId]
}
}
module.exports = new Page();
添加回答
舉報