私は私のウェブサイトの1つにログインすることを約束しました。NodeJSプロミスは決して3番目のthen()のコールには達しません
マイコード:
var Promise = require('promise');
function login(user, pass){
return new Promise(function (fulfill, reject){
var options = {
url: 'https://url.com/this',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': 'https://google.com/page'
}
};
request(options, function(err,httpResponse,body){
fulfill(body);
});
}).then(function(html){
var parsed = parseForm(html);
parsed['post_user_name'] = user;
parsed['post_user_pass'] = pass;
return parsed;
}).then(function(cred){
var query = querystring.stringify(cred);
var options = {
url: 'https://url.com/next',
method: 'POST',
form: query,
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': 'https://google.com/this'
}
};
request(options, function(err,httpResponse,body){
return 'gonext';
});
}).then(function(success){
query = querystring.stringify(cred);
options = {
url: 'https://url.com/loggedin',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': 'https://google.com/loggedin'
}
};
request(options, function(err,httpResponse,body){
return 'go again';
});
}).then(function(success){
console.log('here');
query = querystring.stringify(cred);
options = {
url: 'https://url.com/myaccount',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': 'https://google.com/account'
}
};
request(options, function(err,httpResponse,body){
fs.writeFile('text.txt', body);
return parseAuths(body);
});
});
}
私の問題は:約束は、第三then()
機能に達することはありません。
同様に、すべてのリクエストコールを1つのコードに書き込んでthen()
に送信し、次に必要なデータを次に転送しようとすると、そこには届きません。
function login(user, pass){
return new Promise(function (fulfill, reject){
var options = {
url: 'https://url.com/this',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': 'https://url.com/'
}
};
request(options, function(err,httpResponse,body){
fulfill(body);
});
}).then(function(html){
var parsed = parseForm(html);
parsed['post_user_name'] = user;
parsed['post_user_pass'] = pass;
return parsed;
}).then(function(cred){
var query = querystring.stringify(cred);
var options = {
url: 'https://url.com/that',
method: 'POST',
form: query,
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': 'https://url.com/this'
}
};
request(options, function(err,httpResponse,body){
query = querystring.stringify(cred);
options = {
url: 'https://url.com/another',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': 'https://url.com/that'
}
};
request(options, function(err,httpResponse,body){
query = querystring.stringify(cred);
options = {
url: 'https://url.com/account',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': 'https://url.com/another'
}
};
request(options, function(err,httpResponse,body){
fs.writeFile('text.txt', body);
return parseAuths(body);
});
});
});
}).then(function(data){
console.log(data); // Never reaches this
});
}
私の質問:私は何も露骨に間違っているのでしょうか?私が紛失しているものはありますか?
parseFormの外観は? – Shaun
それは最初の 'then()'にあります。それはそれを通ります。 – Derek
あなたは[request-promise](https://npmjs.com/package/request-promise)を使用して、 。また、同じスコープ内にあるときは、オプションの再割り当てを続けます。 – peteb