我正在使用Cordova Facebook插件获取用户名/电子邮件/等(其工作正常),然后想将其插入我自己的数据库中。我已经通过创建一个函数测试了发布到数据库代码,将其绑定到测试按钮,这也很好。但是当我将post-2-db代码放在fb-login代码中时,它会在我的http-post上完全停止执行。我做console.log(step1)并且看得很好,但是我从来没有看到console.log(step2) - 请参阅下面的代码:
// LOGIN TO FACEBOOK
doFbLogin(){
let permissions = new Array();
let nav = this.navCtrl;
//the permissions your facebook app needs from the user
permissions = ["public_profile"];
Facebook.login(permissions)
.then(function(response){
let userId = response.authResponse.userID;
let params = new Array();
//Getting name and gender properties
Facebook.api("/me?fields=name,gender,email", params)
.then(function(user) {
user.picture = "https://graph.facebook.com/" + userId + "/picture?type=large";
//now we have the users info, let's save it in the NativeStorage
NativeStorage.setItem('user',
{
name: user.name,
gender: user.gender,
picture: user.picture,
email: user.email,
})
.then(function(){
// BEGIN INSERT USER TO DB
// postRequest() {
var headers = new Headers();
headers.append("Accept", 'application/json');
headers.append('Content-Type', 'application/json' );
let options = new RequestOptions({ headers: headers });
let postParams = {
userName: user.name,
userEmail: user.email,
userImage: user.picture,
}
console.log("STEP 1");
// IT WORKS UP TO THIS POINT
this.http.post("http://example.com/post.php", postParams, options)
.subscribe(data => {
console.log(data['_body']);
}, error => {
console.log(error);// Error getting the data
});
//}
// END DB INSERT CODE
// I NEVER SEE THIS CONSOLE LOG BELOW
console.log("STEP 2");
// User Reg complete, push them to app
nav.push(TabsPage);
}, function (error) {
console.log(error);
})
})
}, function(error){
console.log(error);
});
}
}
如果我拿出那段代码,一切正常。我是编码的初学者,我很感激任何彻底的外行级解释和帮助。谢谢。
答案 0 :(得分:3)
正如史蒂文万克所说,
替换你的
.then(function(response){
行
.then((response)=>{
否则您的this
将引用该函数实例
答案 1 :(得分:2)
如果您将该代码放入一个函数中,那么"这个"改变范围。
this.http.post
"这"是指执行上下文,您刚刚更改并且没有" http"连接。或者如果你使用严格,它甚至会被定义。
尝试使用新的es6箭头功能。他们提供静态"这个"。或者只是传递http对象。
答案 2 :(得分:1)
这表示您对http.post
的调用会导致异常。例如,可能未定义this
或this.http
。检查控制台窗口,看看是否有任何相关内容。
捕获异常的方法是使用try / catch块:
try {
this.http.post("http://example.com/post.php", postParams, options)
.subscribe(data => {
console.log(data['_body']);
}, error => {
console.log(error);// Error getting the data
});
console.log("Successful call!");
} catch (error) {
console.log(error);
}
这可以让您深入了解执行未通过http.post函数调用的原因。
答案 3 :(得分:0)
使用map
从服务器获取response
并传递给subscribe
阻止。
this.http.post("http://example.com/post.php", postParams, options).map((res: Response) => res.json() || {})
.subscribe( (data) => {
console.log(data['_body']);
}, error => {
console.log(error);// Error getting the data
});