Bagaimana Angular $ q. saat bekerja?

95

Bisakah seseorang menjelaskan kepada saya bagaimana cara $q.whenkerjanya di AngularJS? Saya mencoba menganalisis cara $httpkerja dan menemukan ini:

var promise = $q.when(config);

Dan inilah objek konfigurasi dari konsol 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

Apa yang terjadi selanjutnya? Bagaimana objek ini diselesaikan atau ditolak?

SET
sumber
$ q mengimplementasikan pola janji itu hanya pembungkus sederhana di sekitar callback dalam javascript. Jadi ketika callback berhasil dijalankan, janji diselesaikan
Ajay Beniwal
1
@Ajaybeniwal, tetapi dalam kasus ini objek diteruskan, bukan callback. Bagaimana menyelesaikan / menolak jika objek lewat, bukan callback?
SET

Jawaban:

113

Panggilan $q.whenmembutuhkan janji atau jenis lainnya, jika itu bukan janji maka itu akan membungkusnya dalam janji dan keputusan panggilan. Jika Anda memberikan nilai padanya maka nilai itu tidak akan pernah ditolak.

Dari dokumen:

Membungkus objek yang mungkin berupa nilai atau janji (pihak ketiga) yang kemudian bisa menjadi janji $ q. Ini berguna saat Anda berurusan dengan objek yang mungkin atau mungkin bukan janji, atau jika janji tersebut berasal dari sumber yang tidak dapat dipercaya.

Derek Ekins
sumber
If you pass a value to it- tetapi bagaimana jika saya melewati objek?
SET
11
nilai, objek, larik semuanya sama.
Derek Ekins
3
bagaimana jika saya melewatkan fungsi yang mengembalikan sebuah janji? apakah itu berarti kemudian panggilan balik itu akan melewati hasil janji param dikirim oleh tekad?
Onur Topal
3
Onur, ketika Anda mengatakan lulus fungsi, maksud Anda sebagai objek fungsi: $q.when(myfunc), atau dengan menerapkan fungsi Anda lewat di: $q.when(myfunc())? Aku tidak tahu persis apa yang akan dilakukan mantan ... yang terakhir akan memanggil myfunc()lebih dulu, dan meneruskan nilai janji yang dikembalikan ke .when().
jrista