确保承诺不会在异步功能结束时泄漏

时间:2018-07-01 20:09:47

标签: javascript asynchronous

我计划使用async / await运行许多任务。由于主循环将不断产生新任务,因此我无法等待任务,因此我需要确保最后对任务的承诺被破坏。以下代码段是否存在承诺的泄漏?如果有更好的方法可以做到这一点,请也告诉我。

addAlert.addTextField(configurationHandler: { (textField) -> Void in
            textField.placeholder = "ABC 123"
            textField.textAlignment = .left
            textField.backgroundColor = Theme.current.barColor
            textField.textColor = Theme.current.titleColor
            textField.attributedPlaceholder = NSAttributedString(string: "ABC 123", attributes: [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 14, weight: .regular), NSAttributedStringKey.foregroundColor : Theme.current.subTitleColor])
            textField.layer.borderWidth = 1.0
            textField.layer.borderColor = Theme.current.subTitleColor.cgColor
            textField.layer.backgroundColor = Theme.current.barColor.cgColor
        })

1 个答案:

答案 0 :(得分:1)

进行了一些测试之后,promise根本不会泄漏(正如我担心的那样,这将导致内存泄漏)。长时间运行以下代码,Mac上的内存消耗徘徊在100MB左右。

const fetch = require ('node-fetch')


var gId = 0;
start()
async function start() {
    var lId;
    var count = 0;
    while (1) {
        lId = gId; gId ++;
        task(lId)
        count ++;
        if (count == 100) {
            count = 0;
            await wait(500)
        }
    }
}


async function task(id) {
    var url = "http://localhost/prod/te.php";
    var r1 = await fetch(url).then((r) => r.text())
    await wait(parseInt(r1) * 1000)
    var r2 = await fetch(url).then((r) => r.text())
}

async function wait(ms) {
    return new Promise (function (resolve, reject) {
        setTimeout(function() {
            resolve(0)
        }, ms)
    })
}