web-dev-qa-db-ja.com

関数でrequest-promiseを使用して値を返すと、undefinedと表示されます

だから、リクエストプロミスのドキュメントを見て、これが私が持っているものです

_function get_data_id(searchValue) {
    rp('http://example.com?data=searchValue')
    .then(function(response) {
        return JSON.parse(response).id;
    });
}
_

そして、このコードをスクリプトの他の場所で使用します

console.log(get_data_id(searchValue));

ただし、undefinedを返します。

return JSON.parse(response).idconsole.log(JSON.parse(response).id)に変更すると、次のようになります。

_undefined
valueofID
_

したがって、私が返そうとしている値は間違いなく有効/正しいですが、値として返す方法がわかりません。

9
cantsay

約束を発信者に返す必要があります。

function get_data_id(searchValue) {
  return rp('http://example.com?data=searchValue')
    .then(function(response) {
      return JSON.parse(response).id;
    });
}

次に、次のように関数を使用します。

get_data_id('hello').then(function (id) {
  console.log('Got the following id:', id)
})
10
idbehold

リクエストプロミスがプロミスを返すからだと思います。

したがって、戻り値を直接console.logにすると、promiseがまだ解決されていないため、未定義になります。

2
Ville Miekk-oja