LoginSignup
18
19

More than 5 years have passed since last update.

Promiseにはクロージャで値を渡せばよかった

Last updated at Posted at 2015-11-29

追記

例が悪かったので,修正.
fugafugaがグローバル変数になってた

こんな感じのことがしたい

function hogePromise() {
  return new Promise(function(resolve, reject) {
    var hogehoge = "hogehoge";
    resolve(hogehoge);
 });
}
function hogeResolve(hogehoge) {
  console.log(hogehoge);
  //ここでfugafugaを表示したい
}

function hogefugaPrinter() {
  var fugafuga = "fugafuga"; 
  hogePromise().then(hogeResolve);
}

hogefugaPrinter();

パッと思いついたこと

jsの仕様詳しく知らないけど,
Haskellみたいに勝手にカリー化してくれんじゃないのかな.

function hogePromise() {
  return new Promise(function(resolve, reject) {
    var hogehoge = "hogehoge";
    resolve(hogehoge);
 });
}
function hogeResolve(fugafuga, hogehoge) {
  console.log(hogehoge);
  console.log(fugafuga);
}

function hogefugaPrinter() {
  var fugafuga = "fugafuga";
  hogePromise().then(hogeResolve(fugafuga));
}

hogefugaPrinter();

結果

fugafugaは表示されたけど,
hogehogeは未定義になってしまった.残念.

出力
undefined
fugafuga

解決策

クロージャを使う

function hogePromise() {
  return new Promise(function(resolve, reject) {
    var hogehoge = "hogehoge";
    resolve(hogehoge);
 });
}
function hogeResolve(fugafuga) {
    return function(hogehoge) {
        console.log(hogehoge);
        console.log(fugafuga);
    }
}

function hogefugaPrinter() {
  var fugafuga = "fugafuga";
  hogePromise().then(hogeResolve(fugafuga));
}

hogefugaPrinter();

結果

出力
hogehoge
fugafuga

できた

雑感

二時間ぐらいここで悩んだ……

Promiseがいいといろんな記事が紹介してるけど,
ここら辺のことはあんまり書いてなかった(自分の見た限りでは)
と思ったので,記事にしました.

js最近少しずつ書けるようになってきたので,
ようやく面白みがわかってきた感じです.

18
19
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19