Як працює Angular $ q.when?


95

Хтось може пояснити мені, як $q.whenпрацює AngularJS? Я намагаюся проаналізувати, як $httpпрацює, і виявив це:

var promise = $q.when(config);

І ось об’єкт конфігурації з консолі Chrome:

Object {transformRequest: Array[1], transformResponse: Array[1], cache: Object, method: "GET", url: "/schedule/month_index.html"…}
cache: Object
headers: Object
method: "GET"
transformRequest: Array[1]
transformResponse: Array[1]
url: "/schedule/month_index.html"
__proto__: Object

Що буде далі? Як вирішити або відхилити цей об’єкт?


$ q реалізує шаблони обіцянок, просто просту обгортку навколо зворотних викликів у javascript.
Тож при успішному запуску

1
@Ajaybeniwal, але в цьому випадку передано об'єкт, а не зворотний виклик. Як це вирішено / відхилено у випадку передачі об’єкта, а не зворотного виклику?
SET

Відповіді:


113

Виклик $q.whenприймає обіцянку або будь-який інший тип, якщо це не обіцянка, тоді вона оберне її обіцянкою та дозволом дзвінка. Якщо ви передасте йому значення, воно ніколи не буде відхилено.

З документів:

Обертає об'єкт, який може бути цінністю або обіцянкою (сторонній виробник), що обіцяється тоді, в обіцянку $ q. Це корисно, коли ви маєте справу з об’єктом, який може бути або не бути обіцянкою, або якщо обіцянка походить від джерела, якому не можна довіряти.


If you pass a value to it- але що, якщо я передаю об'єкт?
SET

11
значення, об'єкт, масив - це все однаково.
Дерек Екінс

3
що якщо я передаю функцію, яка повертає обіцянку? це означає, що тодішній зворотний виклик буде переданий параметру результату обіцянки, надісланому за рішенням?
Онур Топал

3
Онур, коли ви говорите передавати функцію, ви маєте на увазі як об’єкт функції: $q.when(myfunc)або, викликаючи функцію, яку ви передаєте $q.when(myfunc()):? Я не знаю точно, що буде робити myfunc()перший ... другий звернеться першим і передасть повернене обіцяне | значення .when().
jrista
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.