我有以下函数,它返回身份验证的承诺
this.get('session').authenticate('authenticator:custom', {'identification': identification, 'password': password})
.then((data)=>{
console.log(data); //Undefined <- here is my problem.
})
.catch((reason) => {
console.log(reason); // It works, when pass bad password!
this.set('errorMessage', reason.error);
});
当我打电话给它并传递好的用户名和密码时,它会返回&#34; undefined&#34;,但是当我通过不良属性时,我的拒绝&#34;工作得很好。有人知道为什么我的&#34;然后&#34;没有返回预期的输出?
#include <iostream>
#include <PvSystem.h>
#include <PvInterface.h>
#include <PvDevice.h>
int DeviceFinding()
{
PvSystem lSystem;
return 0;
}
int main()
{
std::cout << "Application start" << std::endl;
//DeviceFinding();
return 0;
}
答案 0 :(得分:1)
首先,$ .ajax返回一个jQuery Promise,这些日子比原生Promise好99.999% - 所以不需要在Promise中包装$ .ajax
其次,.then接受两个回调参数,onfullfilled和onrejected,这两个回调只接收一个参数 - 你的onrejected回调永远不会有状态和错误参数 - 所以代码有缺陷
在onfullfilled回调中,参数是一个数组,是你在$ .ajax成功调用中得到的[result,status,jqXHR]
同样,在onrejected回调中,参数是一个数组,为[jqXHR,status,errorThrown]
鉴于此,可以编写验证函数
authenticate: function(options) {
return $.ajax({
url: this.tokenEndpoint,
type: 'POST',
headers: {'Content-Type': 'application/json', 'Accept-Encoding': 'gzip, deflate'},
data: JSON.stringify({
username: options.identification,
password: options.password
})
})
.then(function(arr) {
var response = arr[0];
console.log(response);
// return instead of resolve
return({
lastLoginDate: response.lastLoginDate,
login: response.login,
name: response.name,
role: response.role,
token: response.id_token
});
}, function(arr) {
var xhr = arr[0], status = arr[1], error = arr[2];
if(error !== undefined) {
console.log(error);
}
var response = xhr.responseText;
// return a rejection - could "throw response" instead
return Promise.reject(response);
}
);
}
和FYI - ES2015 +你可以写
.then(function([response, status, xhr]) {
.....
}, function([xhr, status, error]) {
....