将回调附加到承诺的概念是否存在,该承诺充当一次触发的全局事件? (比如$(document).ready())

时间:2016-08-17 21:38:52

标签: javascript jquery events jquery-deferred deferred

这可能是一个奇怪的问题,但我试图在评论中命名这个概念:

SELECT *,
    CASE
       WHEN Flights.From IN ('Rome','London','etc.')
             AND Flights.To IN ('Rome','London','etc.') THEN Flights.From || ', ' || Flights.To
       WHEN Flights.From IN ('Rome','London','etc.') THEN Flights.From
       WHEN Flights.To IN ('Rome','London','etc.') THEN Flights.To
     END as MatchedValue
     ,CASE
       WHEN Flights.From IN ('Rome','London','etc.')
             AND Flights.To IN ('Rome','London','etc.') THEN 'Both'
       WHEN Flights.From IN ('Rome','London','etc.') THEN 'From'
       WHEN Flights.To IN ('Rome','London','etc.') THEN 'To'
     END as MatchedDirection
FROM Flights
WHERE Flights.From='Rome' OR Flights.To='London'

用法:

var fonts = ['font1', 'font2'];
var font_loaded_deferreds = [];

fonts.each(function(n, font) {
    var font_loaded_deferred = $.Deferred();
    $.ajax({ 
        // AJAX options to load the font here...
    }).then(function(data) {
        font_loaded_deferred.resolve();
    });
    font_loaded_deferreds.push(font_loaded_deferred);
});

var all_fonts_loaded_promise = $.when.apply($, font_loaded_deferreds);

var all_fonts_loaded = function(callback) {
    all_fonts_loaded_promise.done(callback);
};

这里的想法是能够在代码中的任何地方将任意数量的回调附加到"事件"每次执行时会触发一次,有点像jQuery自己的$(文档).ready()...特别是在"字体加载"事件已经被解雇了#34;当回调被附加时,由于承诺,回调会立即被执行。如果绑定发生在事件之后,事件处理程序(带有$ .on()和$ .trigger())根本不会执行,所以我觉得" event"不是正确的词。

当然,我意识到"没有"对这个问题是完全有效的答案,但也可以随意讨论。

1 个答案:

答案 0 :(得分:1)

  

是否有一个关于将回调附加到承诺的概念的名称,该承诺充当一次触发的全局事件?

据我所知。然而,这正是承诺的行为,因此如果您在被问及这个概念时只说“承诺”,那么每个人都会理解它是如何运作的。

实际上,不暴露那个附加“事件”回调的函数,而只是公开promise本身会简化大多数代码,并允许链接。至少将其改为

  1 import tkinter
  2 
  3 
  4 class Main():
  5 
  6     def __init__(self):
  7         #Defining Variables:
  8 
  9         background_color = '#%02x%02x%02x' % (223,219,195)
 10         menubar_color = '#%02x%02x%02x' % (191, 167, 126)
 11         menubar_active = '#AB936A'
 12 
 13         #Creating Window:
 14         root = tkinter.Tk()
 15         root.geometry('1000x600')
 16         root.configure(background=background_color)
 17 
 18         #Menu:
 19         menubar = tkinter.Menu(root,bg=menubar_color,activebackground=menuba    r_active,borderwidth=0,font='quicksand.otf')
 20         menubar.add_command(label='Open',command=self.open_file)
 21         menubar.add_cascade(label='Save')
 22         menubar.add_cascade(label='Save As')
 23         menubar.add_cascade(label='New File')
 24 
 25         root.config(menu=menubar)
 26 
 27         #TextEntry Box:
 28         self.textinput = tkinter.Text().grid(row=0,column=0)
 29         root.mainloop()
 30 
 31     def open_file(self):
 32         text = self.textinput.get()
 33         print(text)
 34 
 35 if __name__ == '__main__':
 36     Main()