gpt4 book ai didi

javascript - 采用js6到js5的代码

转载 作者:行者123 更新时间:2023-11-28 18:48:51 25 4
gpt4 key购买 nike

我想使用此示例代码,但我需要使用 javaScript5 而不是 6,因为我们正在使用节点 0.12.7,现在无法升级。(我用的是 Bluebird )

这是js6中的代码

    checkAppPort: function(port, retriesLeft) {
return new Promise((resolve, reject) => {


this.checkPortStatus(port, host).then(resolve, error => {
setTimeout(() => {
this.checkAppPort(port, retriesLeft - 1).then(resolve, reject);
}, 1000);
});
});

现在我已将其更改为以下内容,但出现错误

[ReferenceError: resolve is not defined]

return new Promise(resolve, reject), function () {
this._checkPortStatus(port, HOST).then(resolve, error), function () {
console.log("Waiting for App to start: checking port: " + port + " attempt: " + retriesLeft);
setTimeout(function () {

this.checkAppPort(port, retriesLeft - 1).then(resolve, reject);

}, 1000);
}
};
},

最佳答案

通过 babel Yield 运行 ES2015 代码

checkAppPort: function checkAppPort(port, retriesLeft) {
var _this = this;

return new Promise(function (resolve, reject) {
_this.checkPortStatus(port, host).then(resolve, function (error) {
setTimeout(function () {
_this.checkAppPort(port, retriesLeft - 1).then(resolve, reject);
}, 1000);
});
});
}
<小时/>

The ideal solution would be to change your ES2015 to avoid the new Promise blah blah blah

<小时/>

正如您用 Bluebird 标记的那样

checkAppPort: function checkAppPort(port, retriesLeft) {
var _this = this;

return this.checkPortStatus(port, host)["catch"](function (error) {
return retriesLeft > 0 ? Promise.delay(1000, function () {
return _this.checkAppPort(port, retriesLeft - 1);
}) : Promise.reject(error);
});
}

我相信这是等效代码(ES5) - ES6 版本是

checkAppPort: function (port, retriesLeft) {
return this.checkPortStatus(port, host)
.catch(error => retriesLeft > 0 ? Promise.delay(1000, () => this.checkAppPort(port, retriesLeft - 1)) : Promise.reject(error))
}

我认为这可能不是代码的“最严格”版本

to answer the comment

在 ES5 中

checkAppPort: function checkAppPortAlt(port, retries) {
var _this = this;

var checkit = function checkit(retriesLeft, retry) {
if (retry) {
console.log("Retry ...", retry);
}
return _this.checkPortStatus(port, host)["catch"](function (error) {
return retriesLeft > 0 ? Promise.delay(1000, function () {
return checkit(retriesLeft - 1, retry + 1);
}) : Promise.reject(error);
});
};
return checkit(retries, 0);
}

在 ES2016 中是

checkAppPortAlt: function (port, retries) {
var checkit = (retriesLeft, retry) => {
if(retry) {
console.log("Retry ...", retry);
}
return this.checkPortStatus(port, host)
.catch(error => retriesLeft > 0 ? Promise.delay(1000, () => checkit(retriesLeft - 1, retry + 1)) : Promise.reject(error))
};
return checkit(retries, 0);
}

未经测试,但可能是正确的:D - 我担心 ES2015 代码中 this 的正确性 - 不过,babel 似乎将其翻译为应该在 ES5 中工作的东西

关于javascript - 采用js6到js5的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34854590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com