私はnodejsのような非同期言語には新しく、リンクを訪問してコードをダウンロードし、正規表現で抽出するWebスクレーパーを作成しようとしていますTHENリンクをクリックします。 (より良い方法はありますか?)私は、コールバックを使用することができます認識してんだけど、私は深い8-9のレベルを行かなければならないことを期待し、私は約束が進むべき道だと思いますプロミスはnodejsの手続き型コードで定義されていません
var promise = require("promise");
var request = require("request");
login();
function get_login_code()
{
request.get("someurl.com", function (error, response, body)
{
// just for example
body = 'TOKEN" value="hello world"';
var login_code = body.match(/.TOKEN" value="([^"]+)../i);
return login_code
});
}
function login()
{
var login_promise = promise.resolve(get_login_code());
console.log(login_promise);
}
私が試しました約束事と混乱の組み合わせの束、しかし私はいつも未定義または価値がない約束を得る。コールバック地獄とまったく同じことなので、私は約束の中に約束関数を入れたいとは思わない。誰かが私が間違っていることを教えてもらえますか?私は本当にこのコードを8コールバックではなく手続き的にします。理想的な世界ではpromise.resolve
は、get_login_code()
が実際のコードを返すまで待っていますが、未定義ではありません。
出力:
Promise { _45: 0, _81: 1, _65: undefined, _54: null }
所望の出力:
hello world
私はあなたが読んでお勧めしたい(http://stackoverflow.com/questions/14220321/how-do [非同期操作からのレスポンスを返す方法] -i-return-from-as-asynchronous-call)を使用して、 'return login_code'を愚かにしてから、約束についてもっと多く読むことができます。約束は、非同期操作がいつ行われたかを何とか知る魔法の力を持っていません。約束事を解決したい場合は、約束事を作成して 'resolve()'を呼び出さなければなりません。 – jfriend00