Javascript 如何传递承诺执行者数据?

Javascript 如何传递承诺执行者数据?,javascript,es6-promise,Javascript,Es6 Promise,是否有一种方法可以在不依赖于结束的情况下将参数带入承诺的主体?我不想使用var self=this function Service(n) { this.n = n; } Service.prototype = { get: function (params) { var self = this; return new Promise(function(resolve, reject){ if (params[self.n]

是否有一种方法可以在不依赖于结束的情况下将参数带入承诺的主体?我不想使用
var self=this

function Service(n) {
    this.n = n;
}
Service.prototype = {
    get: function (params) {
        var self = this;
        return new Promise(function(resolve, reject){
            if (params[self.n]) {
                resolve("Service " + self.n);
            } else {
                reject("Service " + self.n);
            }
        });
    }
}

您可以使用箭头函数绕过额外的
var self=this

从:

箭头函数表达式(也称为fat arrow函数)具有 与函数表达式和词汇绑定相比,语法更短 this值(不绑定自己的this、arguments、super或 新目标)。箭头函数总是匿名的

下面是如何在您的示例中使用它:

function Service(n) {
    this.n = n;
}
Service.prototype = {
    get: function (params) {
        return new Promise((resolve, reject) => {
            if (params[this.n]) {
                resolve("Service " + this.n);
            } else {
                reject("Service " + this.n);
            }
        });
    }
}

您可以使用箭头函数绕过额外的
var self=this

从:

箭头函数表达式(也称为fat arrow函数)具有 与函数表达式和词汇绑定相比,语法更短 this值(不绑定自己的this、arguments、super或 新目标)。箭头函数总是匿名的

下面是如何在您的示例中使用它:

function Service(n) {
    this.n = n;
}
Service.prototype = {
    get: function (params) {
        return new Promise((resolve, reject) => {
            if (params[this.n]) {
                resolve("Service " + this.n);
            } else {
                reject("Service " + this.n);
            }
        });
    }
}

实际上,您可以创建立即解决/拒绝的承诺:

Service.prototype = {
    get: function (params) {
        if (params[this.n]) {
            return Promise.resolve("Service " + this.n);
        }

        return Promise.reject("Service " + this.n);
    }
}
参考资料:


您实际上可以创建一个立即解决/拒绝的承诺:

Service.prototype = {
    get: function (params) {
        if (params[this.n]) {
            return Promise.resolve("Service " + this.n);
        }

        return Promise.reject("Service " + this.n);
    }
}
参考资料:


您可以使用ES7
异步功能

function Service(n) {
    this.n = n;
}
Service.prototype = {
    get: async function (params) {
        if (params[this.n]) {
            return "Service " + this.n;
        } else {
            throw "Service " + this.n;
        }
    }
}

我认为闭包没有错。实际上,此代码将传输到依赖闭包的代码。

您可以使用ES7
async
函数

function Service(n) {
    this.n = n;
}
Service.prototype = {
    get: async function (params) {
        if (params[this.n]) {
            return "Service " + this.n;
        } else {
            throw "Service " + this.n;
        }
    }
}


我认为闭包没有错。此代码实际上将传输到依赖闭包的代码。

标记es6,使用箭头函数如果您的函数不是异步的,为什么要返回承诺?@hege_hegedus因为接口?@hege_hegedus从设计角度和类型系统来看,您必须返回相同类型的值(这就是具有强类型的语言对您的要求)。从这个角度来看,在我的代码中,函数要么总是返回一个承诺或其他内容。@zerkms+1用于提及类型安全性。你完全正确,但我仍然不能冒险
TypeError:x。那么,它就不是一个函数,因为有人将同步代码作为回调。另外,不要忘记抛出同步错误。应该是这样的如果你的函数不是异步的,你为什么要返回一个承诺?@hege_-hegedus因为接口的原因?@hege_-hegedus好吧,从设计角度和类型系统来看,你必须返回相同类型的值(这是强类型语言需要你的)。从这个角度来看,在我的代码中,函数要么总是返回一个承诺或其他内容。@zerkms+1用于提及类型安全性。你完全正确,但我仍然不能冒险
TypeError:x。那么,它就不是一个函数,因为有人将同步代码作为回调。另外,不要忘记抛出同步错误。应该是这样的也可能是拒绝。我想这正是我想要的。这基本上避免了创建新的承诺,对吗?好吧,它创建了一个承诺,但这已经用给定的值解决了。好吧,我会用get.Yep做出一个承诺。当你在承诺构造函数体中没有任何异步时,这是一个你不需要的符号我想这正是我想要的。这基本上避免了创建一个新的承诺,对吗?好吧,它创建了一个承诺,但这已经用一个给定的值解决了。好吧,我会用get.Yep做出承诺。当你在承诺构造函数体中没有任何异步的东西时,它是一个sign您不需要它,而是按照我的建议去做。这很好,但我现在不想在这个项目中使用箭头函数。这可以用
函数来完成吗?bind()
以同样的方式完成吗?@zero298闭包比bind好,除了在实例化一个带有rest参数的类时。
新建一个(…args)
新建(A.bind.apply(A[null].concat([args]))
效果很好,但我现在不想在这个项目中使用箭头函数。这可以用
函数来实现吗?bind()
以同样的方式实现吗?@zero298闭包比bind好,除非在实例化一个带有rest参数的类时。
新建一个(…args)
新建(A.bind.apply(A[null].concat([args]))