Есть ли разница между возвратом обещания из асинхронной или обычной функции? - PullRequest
0 голосов
/ 14 февраля 2019

В течение некоторого времени мне было интересно, не является ли избыточным ключевое слово async при простом возврате обещания.

Рассмотрим следующее:

async function thePromise() {
    const v = await Inner();
    return v+1;
}

async function wrapper() {
    return thePromise();
}

Мне было интереснодля функции wrapper, так как она не ждет внутри обещания разрешения, разве ключевое слово async не будет избыточным?И не следует ли нам просто использовать:

function wrapper() {
    return thePromise();
}

Очевидным недостатком является то, что этот формат скрывает то, что мы используем обещания, но кроме этого: есть ли реальная разница между возвратом обещания из асинхронной функции или нормальногофункционировать?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Поскольку в javascript отсутствует такая вещь, как Promise of Promise, они эквивалентны

// code 1
promise1.then(() => {
  //...
  return promise2;
}).then(f);

// is equivalent to code 2

promise1.then(() => {
  //...
  return promise2.then(f);
});

То же самое происходит с асинхронными функциями, возвращение обещания из асинхронной функции эквивалентно возвращениюожидаемое выражение

// code 3
async () => {
  // ...
  return p;
}

// is equivalent to code 4
async () => {
  // ...
  return await p;
}

Стоит отметить, что это не относится к массивам обещаний и тому подобному.Для этих сценариев вы можете заключить массив в Promise.all, чтобы превратить массив обещаний в обещание массива или свой собственный код для других структур данных.

0 голосов
/ 14 февраля 2019

Рассмотрим это простое демо: -

var me = {
    name: 'Shivendra'
}
// promise creation
var myPromise = new Promise((resolve, reject) => {
    if (me) {
        resolve(me.name==='Shivendra')
    }
    else {
        reject(new Error("Oh no !"))
    }
}
)

function wrapper(){
    return myPromise;
}
// promise consumption
wrapper().then(res => {
    if (res) {
        console.log("Promised passed")
        console.log(me)
    }
    else {
        console.log("Promise was failed")
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...