В двух словах, ваши два примера похожи на сравнение этих двух утверждений:
var x = 1;
var x = function() { return 1;}
Первый определяет переменную и присваивает ей значение.
Второй определяет переменную и назначает ей функцию. Эта функция должна быть вызвана до того, как она что-то сделает или выдаст какое-то конкретное значение.
Ваш первый пример кода:
function myfunction() {
return new Promise((resolve, reject) => {
// do stuff
});
}
Это функция, которая создает и возвращает новое обещание. когда это называется. Вы должны вызвать функцию, прежде чем она что-то сделает. Код, который вы показываете, просто определяет функцию, но на самом деле ничего не запускает. myfunction
- это функция. Чтобы получить обещание, вы должны вызвать эту функцию следующим образом:
myfunction().then(...).catch(...)
Ваш второй пример кода:
var myfunction = new Promise((resolve, reject) => {
// do stuff
});
создает новое обещание и присваивает само обещание вашей переменной myfunction
. После выполнения этого кода myfunction
будет содержать обещание.
Итак, в первом примере myfunction
- это функция. Во втором примере myfunction
- это обещание.
В чем разница между этими двумя?
Как описано выше, это разные куски кода для разных целей.
Есть ли предпочтение, когда использовать один или другой?
Это зависит от того, что вы хотите сделать. Если вы хотите определить многократно используемую функцию, которую вы можете вызывать более одного раза, которая создает обещание (которое предположительно отслеживает некоторую асинхронную операцию), тогда вы должны использовать первую функцию и вызывать ее каждый раз, когда захотите запустить асинхронную операцию и верни обещание.
Если вы хотите (только один раз) создать обещание и поместить его в переменную, вы бы использовали второе. Различные конструкции кода для разных целей, которые делают разные вещи.
Имейте в виду, что обещание - это просто обычный объект Javascript, который служит системой уведомлений для отслеживания и уведомления другого кода о завершении асинхронной операции. Когда вы делаете new Promise()
, все, что происходит, - это создание нового объекта Javascript. Обещания - это просто простые объекты Javascript с несколькими методами и некоторыми данными экземпляра. У них нет магических способностей что-либо наблюдать. На самом деле, они делают только то, что им говорят. Некоторые люди думают, что они каким-то образом автоматически знают, когда внутри них выполняется асинхронная операция. Они не. Вы должны вручную подключиться к операции завершения асинхронной операции и вручную вызвать resolve(...)
или reject(...)
. Когда вы это сделаете, обещание уведомит всех слушателей, которые установили себя с .then(...)
или .catch(...)
.