[解決済み] プロミスはonFulfilledに複数の引数を持つことができますか?
2022-05-07 12:57:19
質問
仕様書に従っています ここで で、onFulfilledが複数の引数で呼び出されることを許可しているかどうか、よくわかりません。 例えば
promise = new Promise(function(onFulfilled, onRejected){
onFulfilled('arg1', 'arg2');
})
このような私のコードに
promise.then(function(arg1, arg2){
// ....
});
の両方を受け取ることになります。
arg1
と
arg2
?
私は特定のプロミス実装がどのようにそれを行うかについて気にしない、私はプロミスのためのw3c仕様に忠実に従うことを望む。
どのように解決するのですか?
<ブロッククオートこちらの仕様書に従っているのですが、onFulfilledを複数の引数で呼び出すことができるのかどうか、よくわかりません。
プロミスのコンストラクタで解決値として扱われるのは、最初のパラメータだけです。オブジェクトや配列のような複合的な値で解決することができます。
私は特定のプロミス実装がどのように行うかは気にせず、プロミスのw3c仕様に忠実に従いたいと思っています。
そこが間違っていると思います。その仕様とは
最小限の設計
で、プロミス・ライブラリ間の相互運用のために構築されています。アイデアは,例えば DOM futures が確実に使用でき,ライブラリが消費できるようなサブセットを持つことです.Promise の実装は,あなたが尋ねたことを
.spread
を使うようになりました。例えば
Promise.try(function(){
return ["Hello","World","!"];
}).spread(function(a,b,c){
console.log(a,b+c); // "Hello World!";
});
と ブルーバード . この機能が必要な場合の1つの解決策は、ポリフィルを行うことです。
if (!Promise.prototype.spread) {
Promise.prototype.spread = function (fn) {
return this.then(function (args) {
return Promise.all(args); // wait for all
}).then(function(args){
//this is always undefined in A+ complaint, but just in case
return fn.apply(this, args);
});
};
}
これで、できるようになります。
Promise.resolve(null).then(function(){
return ["Hello","World","!"];
}).spread(function(a,b,c){
console.log(a,b+c);
});
ネイティブな約束事を安心して フィドル . あるいは、現在(2018年)ブラウザで当たり前のように使われているspreadを使う。
Promise.resolve(["Hello","World","!"]).then(([a,b,c]) => {
console.log(a,b+c);
});
あるいはawaitで。
let [a, b, c] = await Promise.resolve(['hello', 'world', '!']);
関連
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み】PromiseとObservablesの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
要素ツリー制御によるvueTreeテーブル
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
JavaScriptのクロージャの説明
-
JavaScriptの配列共通メソッド解説
-
VUEグローバルフィルターの概念と留意点、基本的な使い方
-
Vueの「データを聴く」原則を解説
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません