検索

ホームページ  >  に質問  >  本文

express - node.js中的promise回调的写法问题

请教正确的promise用法!!!

下面是错误的写法 最后没有return的结果就是 调用这个API函数拿不到promise

const apiFunction = () => {
    return Promise.resolve()
            .then(() => (demoResolve()))
            .then(() => (demoReject()))
    
            .then((data) => {
                // bug
                Promise.resolve(data);
            })
            .catch((err) => {
                // bug
                Promise.reject(err);
            });
};        

改进后下面这个promise方法能够如预期的拿到promise的值

const apiFunction = () => {
    return Promise.resolve()
            .then(() => (doResolve()))
            .then(() => (doReject()))
            // okay √
            .then((data) => Promise.resolve(data))
            // okay √
            .catch((err) => Promise.reject(err));
};
    

之后又尝试了一种写法,感觉这种写法和第一种写法没有什么区别,但是这样也写也是可以得到正确结果的。
请问这是什么情况呢?
这样写有错误吗?

const apiFunction = () => {
    return Promise.resolve()
            .then(() => (doResolve()))
            .then(() => (doReject()))
            .then(Promise.resolve)
            .catch(Promise.reject);
};

是不是等价于这种写法

const apiFunction = () => {
    return Promise.resolve()
            .then(() => (doResolve()))
            .then(() => (doReject()))
            .then(result)
            .catch(err);
};
PHPzPHPz2768日前630

全員に返信(3)返信します

  • 迷茫

    迷茫2017-04-17 15:27:08

    1. ES6 を比較 => ES5 以降、最初の書き方と 2 番目の書き方の違いは主に Promise が返されるかどうかです

    リーリー

    3 番目のタイプと最初のタイプの違いは、返すかどうかです

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:27:08

    最初の文言 AL. はどこから来たのですか

    更新。

    しまった、この質問を見て、確かに質問者さんの書き方が間違っていたので質問させていただきました。後でもう一度来たら、他の回答者がすべて正しい答えを言っていたので、気にしませんでしたが、今日は踏まれました。本当に悔しい思いをしています。


    それでは、もう一度答えを教えましょう。

    Promise の then を返す必要があります。これは、後で使用するための新しい Promise を生成するために使用されます。

    匿名アロー関数が式を返す場合、デフォルトでそれを返します。

    直接記述すると.then(Promise.resolve)、このメソッドはコールバックとして使用されますが、これはもちろん正しいです。 Promise.resolve

    この書き方では、結果がどうなるか分かりません、質問に記載されていません。 .then(result)

    つまり、 then は最後に返さなければなりません。これは、後続のチェーン呼び出しの新しい Promise を生成するために使用されます。

    返事
    0
  • 阿神

    阿神2017-04-17 15:27:08

    最初の書き方は完全に間違っているわけではありません。then で新しい Promise オブジェクトを返さなかっただけです。

    返事
    0
  • キャンセル返事