1. ホーム
  2. javascript

[解決済み] プロミス、追加パラメータを渡してチェーンする

2022-10-14 09:19:15

質問

例えば、約束事。

var P = new Promise(function (resolve, reject) {
  var a = 5;
  if (a) {
    setTimeout(function(){
      resolve(a);
    }, 3000);
  } else {
    reject(a);
  }
});

を呼び出した後 .then() メソッドをプロミスで呼び出します。

P.then(doWork('text'));

次に doWork 関数はこのようになります。

function doWork(data) {
  return function(text) {
    // sample function to console log
    consoleToLog(data);
    consoleToLog(b);
  }
}

プロミスやテキストパラメータからデータにアクセスするために、doWorkでインナー関数を返さないようにするにはどうすればよいでしょうか?インナー関数を回避するコツはあるのでしょうか?

どのように解決するのですか?

あなたは Function.prototype.bind を使用して、次のように第一引数に値を渡す新しい関数を作成します。

P.then(doWork.bind(null, 'text'))

を変更することができます。 doWork に変更します。

function doWork(text, data) {
  consoleToLog(data);
}

今すぐ text は実際には 'text'doWorkdata はプロミスで解決された値になります。

注意してください。 プロミスチェーンには必ず拒否ハンドラを付けてください。


動作中のプログラムです。 BabelのREPLでのライブコピー

function doWork(text, data) {
  console.log(text + data + text);
}

new Promise(function (resolve, reject) {
    var a = 5;
    if (a) {
      setTimeout(function () {
        resolve(a);
      }, 3000);
    } else {
      reject(a);
    }
  })
  .then(doWork.bind(null, 'text'))
  .catch(console.error);