亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何避免 JavaScript 中的無限循環

如何避免 JavaScript 中的無限循環

烙印99 2021-12-23 16:47:47
我有一個 Selenium webdriverIOV5 框架。我在這里面臨的問題是,下面的代碼在 Mac OS 上工作正常,但在 Windows 操作系統上不能正常工作。在 Windows 操作系統中,它會遇到無限循環問題。下面的代碼功能是: 合并yaml文件(包含定位器)并通過傳遞鍵返回定位器的值:const glob = require('glob');const yamlMerge = require('yaml-merge');const sleep = require('system-sleep');let xpath;class Page {    getElements(elementId) {        function objectCollector() {            glob('tests/wdio/locators/*.yml', function (er, files) {                if (er) throw er;                xpath = yamlMerge.mergeFiles(files);            });            do {                sleep(10);            } while (xpath === undefined);            return xpath;        }        objectCollector();        return xpath[elementId];    }}module.exports = new Page();
查看完整描述

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


查看完整回答
反對 回復 2021-12-23
  • 1 回答
  • 0 關注
  • 355 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號