从 .then() 函数执行命名的“fat arrow”
Executing named `fat arrow` from .then() function
成功在 then
回调中的成功工厂响应中被调用:
这不起作用,找不到 response
:
this.storeFactory.getSafes().then(success(response), failure());
如何正确地将响应传递给 success
函数?
var success = (response: any): void => {
scope.safes = response.data.safes;
localStorage.setItem('safeCount', scope.safes.length);
this.$http.get('/app/dashboard/safes/safes.html', { cache: this.$templateCache }).success((tplContent): void => {
element.replaceWith(this.$compile(tplContent)(scope));
});
}
长手版还好,但我觉得很乱
this.storeFactory.getSafes().then((response: any): void => {
scope.safes = response.data.safes;
localStorage.setItem('safeCount', scope.safes.length);
this.$http.get('/app/dashboard/safes/safes.html', { cache: this.$templateCache }).success((tplContent): void => {
element.replaceWith(this.$compile(tplContent)(scope));
});
}
你的AJAX调用的回调也需要使用箭头函数:
this.$http.get('/app/dashboard/safes/safes.html', { cache: this.$templateCache }).success((tplContent) => {
element.replaceWith(this.$compile(tplContent)(scope));
});
我无法使用 ES2015 语法或 Typescript,但是您传回 success
回调的方式看起来很可疑。
而不是
this.storeFactory.getSafes().then(success(response), failure());
你应该使用
this.storeFactory.getSafes().then(success, failure);
How to I pass the response
to the success
function correctly?
你不会。您将 success
函数传递给 then
方法,然后 promise 会将 结果值传递给您的 success
函数。这就是回调的工作原理。
您需要做的就是将 response
声明为函数的参数。 您不能自己调用该函数 - 您只应将其作为回调传递:
this.storeFactory.getSafes().then(success, failure);
此外,在将函数传递给 then
之前,您还需要定义这些函数。如果您只声明它们,并将 undefined
值传递给 then
,它们将被忽略。使用
var success = (response: any): void => {
scope.safes = response.data.safes;
localStorage.setItem('safeCount', scope.safes.length);
this.$http.get('/app/dashboard/safes/safes.html', { cache: this.$templateCache }).success((tplContent): void => {
element.replaceWith(this.$compile(tplContent)(scope));
});
};
var failure = (): void => {
this.$http.get('/app/shared/mocks/tableError.html', { cache: this.$templateCache }).success((tplContent): void => {
element.replaceWith(this.$compile(tplContent)(scope));
});
}
this.storeFactory.getSafes().then(success, failure);
然而,箭头函数实际上应该是内联定义的,而不是将它们分配给特定的变量。 (您在问题中将其称为 "long hand version" ,即使它实际上更短)。使用它,您将不会遇到这些问题。
一般来说,我建议完全避免在变量赋值中定义函数。如果您需要一个变量,只需 use a declaration instead(Typescript 语法应该变化不大)。
成功在 then
回调中的成功工厂响应中被调用:
这不起作用,找不到 response
:
this.storeFactory.getSafes().then(success(response), failure());
如何正确地将响应传递给 success
函数?
var success = (response: any): void => {
scope.safes = response.data.safes;
localStorage.setItem('safeCount', scope.safes.length);
this.$http.get('/app/dashboard/safes/safes.html', { cache: this.$templateCache }).success((tplContent): void => {
element.replaceWith(this.$compile(tplContent)(scope));
});
}
长手版还好,但我觉得很乱
this.storeFactory.getSafes().then((response: any): void => {
scope.safes = response.data.safes;
localStorage.setItem('safeCount', scope.safes.length);
this.$http.get('/app/dashboard/safes/safes.html', { cache: this.$templateCache }).success((tplContent): void => {
element.replaceWith(this.$compile(tplContent)(scope));
});
}
你的AJAX调用的回调也需要使用箭头函数:
this.$http.get('/app/dashboard/safes/safes.html', { cache: this.$templateCache }).success((tplContent) => {
element.replaceWith(this.$compile(tplContent)(scope));
});
我无法使用 ES2015 语法或 Typescript,但是您传回 success
回调的方式看起来很可疑。
而不是
this.storeFactory.getSafes().then(success(response), failure());
你应该使用
this.storeFactory.getSafes().then(success, failure);
How to I pass the
response
to thesuccess
function correctly?
你不会。您将 success
函数传递给 then
方法,然后 promise 会将 结果值传递给您的 success
函数。这就是回调的工作原理。
您需要做的就是将 response
声明为函数的参数。 您不能自己调用该函数 - 您只应将其作为回调传递:
this.storeFactory.getSafes().then(success, failure);
此外,在将函数传递给 then
之前,您还需要定义这些函数。如果您只声明它们,并将 undefined
值传递给 then
,它们将被忽略。使用
var success = (response: any): void => {
scope.safes = response.data.safes;
localStorage.setItem('safeCount', scope.safes.length);
this.$http.get('/app/dashboard/safes/safes.html', { cache: this.$templateCache }).success((tplContent): void => {
element.replaceWith(this.$compile(tplContent)(scope));
});
};
var failure = (): void => {
this.$http.get('/app/shared/mocks/tableError.html', { cache: this.$templateCache }).success((tplContent): void => {
element.replaceWith(this.$compile(tplContent)(scope));
});
}
this.storeFactory.getSafes().then(success, failure);
然而,箭头函数实际上应该是内联定义的,而不是将它们分配给特定的变量。 (您在问题中将其称为 "long hand version" ,即使它实际上更短)。使用它,您将不会遇到这些问题。
一般来说,我建议完全避免在变量赋值中定义函数。如果您需要一个变量,只需 use a declaration instead(Typescript 语法应该变化不大)。