{"id":"https://openalex.org/W2898093955","doi":"https://doi.org/10.1145/3276532","title":"Finding broken promises in asynchronous JavaScript programs","display_name":"Finding broken promises in asynchronous JavaScript programs","publication_year":2018,"publication_date":"2018-10-24","ids":{"openalex":"https://openalex.org/W2898093955","doi":"https://doi.org/10.1145/3276532","mag":"2898093955"},"language":"en","primary_location":{"id":"doi:10.1145/3276532","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3276532","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/3276532","source":{"id":"https://openalex.org/S4210216081","display_name":"Proceedings of the ACM on Programming Languages","issn_l":"2475-1421","issn":["2475-1421"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Programming Languages","raw_type":"journal-article"},"type":"article","indexed_in":["crossref"],"open_access":{"is_oa":true,"oa_status":"diamond","oa_url":"https://dl.acm.org/doi/pdf/10.1145/3276532","any_repository_has_fulltext":null},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5033475627","display_name":"Saba Alimadadi","orcid":"https://orcid.org/0000-0002-5667-152X"},"institutions":[{"id":"https://openalex.org/I12912129","display_name":"Northeastern University","ror":"https://ror.org/04t5xt781","country_code":"US","type":"education","lineage":["https://openalex.org/I12912129"]}],"countries":["US"],"is_corresponding":false,"raw_author_name":"Saba Alimadadi","raw_affiliation_strings":["Northeastern University, USA"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Northeastern University, USA","institution_ids":["https://openalex.org/I12912129"]}]},{"author_position":"middle","author":{"id":"https://openalex.org/A5074335599","display_name":"Di Zhong","orcid":"https://orcid.org/0000-0001-9645-9112"},"institutions":[{"id":"https://openalex.org/I12912129","display_name":"Northeastern University","ror":"https://ror.org/04t5xt781","country_code":"US","type":"education","lineage":["https://openalex.org/I12912129"]}],"countries":["US"],"is_corresponding":false,"raw_author_name":"Di Zhong","raw_affiliation_strings":["Northeastern University, USA"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Northeastern University, USA","institution_ids":["https://openalex.org/I12912129"]}]},{"author_position":"middle","author":{"id":"https://openalex.org/A5034330109","display_name":"Magnus Madsen","orcid":"https://orcid.org/0000-0002-7510-8724"},"institutions":[{"id":"https://openalex.org/I891191580","display_name":"Aalborg University","ror":"https://ror.org/04m5j1k67","country_code":"DK","type":"education","lineage":["https://openalex.org/I891191580"]}],"countries":["DK"],"is_corresponding":false,"raw_author_name":"Magnus Madsen","raw_affiliation_strings":["Aalborg University, Denmark"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Aalborg University, Denmark","institution_ids":["https://openalex.org/I891191580"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5087594876","display_name":"Frank Tip","orcid":"https://orcid.org/0000-0002-1862-3498"},"institutions":[{"id":"https://openalex.org/I12912129","display_name":"Northeastern University","ror":"https://ror.org/04t5xt781","country_code":"US","type":"education","lineage":["https://openalex.org/I12912129"]}],"countries":["US"],"is_corresponding":false,"raw_author_name":"Frank Tip","raw_affiliation_strings":["Northeastern University, USA"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Northeastern University, USA","institution_ids":["https://openalex.org/I12912129"]}]}],"institutions":[],"countries_distinct_count":2,"institutions_distinct_count":2,"corresponding_author_ids":[],"corresponding_institution_ids":[],"apc_list":null,"apc_paid":null,"fwci":1.9656,"has_fulltext":true,"cited_by_count":22,"citation_normalized_percentile":{"value":0.8969558,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":{"min":90,"max":98},"biblio":{"volume":"2","issue":"OOPSLA","first_page":"1","last_page":"26"},"is_retracted":false,"is_paratext":false,"is_xpac":false,"primary_topic":{"id":"https://openalex.org/T10126","display_name":"Logic, programming, and type systems","score":0.9990000128746033,"subfield":{"id":"https://openalex.org/subfields/1702","display_name":"Artificial Intelligence"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},"topics":[{"id":"https://openalex.org/T10126","display_name":"Logic, programming, and type systems","score":0.9990000128746033,"subfield":{"id":"https://openalex.org/subfields/1702","display_name":"Artificial Intelligence"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10743","display_name":"Software Testing and Debugging Techniques","score":0.9987999796867371,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10260","display_name":"Software Engineering Research","score":0.9984999895095825,"subfield":{"id":"https://openalex.org/subfields/1710","display_name":"Information Systems"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}}],"keywords":[{"id":"https://openalex.org/keywords/computer-science","display_name":"Computer science","score":0.8417293429374695},{"id":"https://openalex.org/keywords/callback","display_name":"Callback","score":0.8099328279495239},{"id":"https://openalex.org/keywords/debugging","display_name":"Debugging","score":0.6023999452590942},{"id":"https://openalex.org/keywords/javascript","display_name":"JavaScript","score":0.5336746573448181},{"id":"https://openalex.org/keywords/asynchrony","display_name":"Asynchrony (computer programming)","score":0.5195763111114502},{"id":"https://openalex.org/keywords/programming-language","display_name":"Programming language","score":0.5049787163734436},{"id":"https://openalex.org/keywords/control-flow","display_name":"Control flow","score":0.47185632586479187},{"id":"https://openalex.org/keywords/event","display_name":"Event (particle physics)","score":0.46626147627830505},{"id":"https://openalex.org/keywords/web-application","display_name":"Web application","score":0.4528934359550476},{"id":"https://openalex.org/keywords/asynchronous-communication","display_name":"Asynchronous communication","score":0.35435670614242554},{"id":"https://openalex.org/keywords/theoretical-computer-science","display_name":"Theoretical computer science","score":0.34007030725479126},{"id":"https://openalex.org/keywords/software-engineering","display_name":"Software engineering","score":0.32777565717697144},{"id":"https://openalex.org/keywords/world-wide-web","display_name":"World Wide Web","score":0.2701062858104706}],"concepts":[{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.8417293429374695},{"id":"https://openalex.org/C204495577","wikidata":"https://www.wikidata.org/wiki/Q1205349","display_name":"Callback","level":2,"score":0.8099328279495239},{"id":"https://openalex.org/C168065819","wikidata":"https://www.wikidata.org/wiki/Q845566","display_name":"Debugging","level":2,"score":0.6023999452590942},{"id":"https://openalex.org/C544833334","wikidata":"https://www.wikidata.org/wiki/Q2005","display_name":"JavaScript","level":2,"score":0.5336746573448181},{"id":"https://openalex.org/C2779019669","wikidata":"https://www.wikidata.org/wiki/Q25203946","display_name":"Asynchrony (computer programming)","level":3,"score":0.5195763111114502},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.5049787163734436},{"id":"https://openalex.org/C160191386","wikidata":"https://www.wikidata.org/wiki/Q868299","display_name":"Control flow","level":2,"score":0.47185632586479187},{"id":"https://openalex.org/C2779662365","wikidata":"https://www.wikidata.org/wiki/Q5416694","display_name":"Event (particle physics)","level":2,"score":0.46626147627830505},{"id":"https://openalex.org/C118643609","wikidata":"https://www.wikidata.org/wiki/Q189210","display_name":"Web application","level":2,"score":0.4528934359550476},{"id":"https://openalex.org/C151319957","wikidata":"https://www.wikidata.org/wiki/Q752739","display_name":"Asynchronous communication","level":2,"score":0.35435670614242554},{"id":"https://openalex.org/C80444323","wikidata":"https://www.wikidata.org/wiki/Q2878974","display_name":"Theoretical computer science","level":1,"score":0.34007030725479126},{"id":"https://openalex.org/C115903868","wikidata":"https://www.wikidata.org/wiki/Q80993","display_name":"Software engineering","level":1,"score":0.32777565717697144},{"id":"https://openalex.org/C136764020","wikidata":"https://www.wikidata.org/wiki/Q466","display_name":"World Wide Web","level":1,"score":0.2701062858104706},{"id":"https://openalex.org/C121332964","wikidata":"https://www.wikidata.org/wiki/Q413","display_name":"Physics","level":0,"score":0.0},{"id":"https://openalex.org/C62520636","wikidata":"https://www.wikidata.org/wiki/Q944","display_name":"Quantum mechanics","level":1,"score":0.0},{"id":"https://openalex.org/C31258907","wikidata":"https://www.wikidata.org/wiki/Q1301371","display_name":"Computer network","level":1,"score":0.0}],"mesh":[],"locations_count":3,"locations":[{"id":"doi:10.1145/3276532","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3276532","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/3276532","source":{"id":"https://openalex.org/S4210216081","display_name":"Proceedings of the ACM on Programming Languages","issn_l":"2475-1421","issn":["2475-1421"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Programming Languages","raw_type":"journal-article"},{"id":"pmh:oai:pure.atira.dk:openaire/046beb36-d56c-49dd-972e-881e36f44e86","is_oa":true,"landing_page_url":"https://pure.au.dk/portal/en/publications/046beb36-d56c-49dd-972e-881e36f44e86","pdf_url":"https://pure.au.dk/ws/files/138353277/oopsla18main_p154_p.pdf","source":null,"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"Alimadadi, S, Zhong, D, Madsen, M & Tip, F 2018, 'Finding Broken Promises in Asynchronous JavaScript Programs', Proceedings of the ACM on Programming Languages , vol. 2, no. OOPSLA, 162, pp. 162:1-162:26. https://doi.org/10.1145/3276532","raw_type":"info:eu-repo/semantics/article"},{"id":"pmh:oai:pure.atira.dk:publications/046beb36-d56c-49dd-972e-881e36f44e86","is_oa":true,"landing_page_url":"http://doi.acm.org/10.1145/3276532","pdf_url":null,"source":null,"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"Alimadadi, S, Zhong, D, Madsen, M & Tip, F 2018, 'Finding Broken Promises in Asynchronous JavaScript Programs', Proceedings of the ACM on Programming Languages , vol. 2, no. OOPSLA, 162, pp. 162:1-162:26. https://doi.org/10.1145/3276532","raw_type":"info:eu-repo/semantics/article"}],"best_oa_location":{"id":"doi:10.1145/3276532","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3276532","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/3276532","source":{"id":"https://openalex.org/S4210216081","display_name":"Proceedings of the ACM on Programming Languages","issn_l":"2475-1421","issn":["2475-1421"],"is_oa":true,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Programming Languages","raw_type":"journal-article"},"sustainable_development_goals":[{"display_name":"Partnerships for the goals","score":0.46000000834465027,"id":"https://metadata.un.org/sdg/17"}],"awards":[{"id":"https://openalex.org/G154579872","display_name":null,"funder_award_id":"CCF-1715153","funder_id":"https://openalex.org/F4320306076","funder_display_name":"National Science Foundation"},{"id":"https://openalex.org/G7726608270","display_name":"SHF: Small: Automated Detection and Repair of Errors in Event-Driven Applications","funder_award_id":"1715153","funder_id":"https://openalex.org/F4320306076","funder_display_name":"National Science Foundation"}],"funders":[{"id":"https://openalex.org/F4320306076","display_name":"National Science Foundation","ror":"https://ror.org/021nxhr62"},{"id":"https://openalex.org/F4320334593","display_name":"Natural Sciences and Engineering Research Council of Canada","ror":"https://ror.org/01h531d29"}],"has_content":{"pdf":true,"grobid_xml":true},"content_urls":{"pdf":"https://content.openalex.org/works/W2898093955.pdf","grobid_xml":"https://content.openalex.org/works/W2898093955.grobid-xml"},"referenced_works_count":33,"referenced_works":["https://openalex.org/W89731140","https://openalex.org/W1483380114","https://openalex.org/W1649645444","https://openalex.org/W1839269954","https://openalex.org/W1964318686","https://openalex.org/W1987647365","https://openalex.org/W1989147905","https://openalex.org/W2001730388","https://openalex.org/W2016263254","https://openalex.org/W2036639103","https://openalex.org/W2088505585","https://openalex.org/W2102664288","https://openalex.org/W2105482755","https://openalex.org/W2141018153","https://openalex.org/W2141305501","https://openalex.org/W2156370972","https://openalex.org/W2166150184","https://openalex.org/W2262523701","https://openalex.org/W2277373197","https://openalex.org/W2373401668","https://openalex.org/W2393286498","https://openalex.org/W2395760792","https://openalex.org/W2530507015","https://openalex.org/W2618852163","https://openalex.org/W2619950022","https://openalex.org/W2740995941","https://openalex.org/W2758513221","https://openalex.org/W2761442781","https://openalex.org/W2761769434","https://openalex.org/W2767646260","https://openalex.org/W2795181345","https://openalex.org/W3014461055","https://openalex.org/W4237840017"],"related_works":["https://openalex.org/W4214504500","https://openalex.org/W4206210324","https://openalex.org/W2737171366","https://openalex.org/W2480874422","https://openalex.org/W4284698742","https://openalex.org/W17837200","https://openalex.org/W2950344926","https://openalex.org/W2953905390","https://openalex.org/W2488213809","https://openalex.org/W2604699606"],"abstract_inverted_index":{"Recently,":[0],"promises":[1,56],"were":[2],"added":[3],"to":[4,12,51,78,129,163,178],"ECMAScript":[5,104,135],"6,":[6,105,136],"the":[7,17,44,61,116,124,142,152,189],"JavaScript":[8],"standard,":[9],"in":[10,21,68,103,134,206],"order":[11],"provide":[13,196],"better":[14],"support":[15],"for":[16,89,114],"asynchrony":[18],"that":[19,188,211],"arises":[20],"user":[22],"interfaces,":[23],"network":[24],"communication,":[25],"and":[26,43,60,64,74,91,106,141,146,154,167,210],"non-blocking":[27],"I/O.":[28],"Using":[29],"promises,":[30],"programmers":[31],"can":[32,75,195,214],"avoid":[33],"common":[34,169,204],"pitfalls":[35],"of":[36,126,156,203],"event-driven":[37],"programming":[38],"such":[39],"as":[40,52,85],"event":[41],"races":[42],"deeply":[45],"nested":[46],"counterintuitive":[47],"control":[48],"ow":[49,66],"referred":[50],"\u201ccallback":[53],"hell\u201d.":[54],"Unfortunately,":[55],"have":[57],"complex":[58],"semantics":[59],"intricate":[62],"control\u2013":[63],"data-":[65],"present":[67,109],"promise-based":[69,93,182,208],"code":[70],"hinders":[71],"program":[72],"comprehension":[73],"easily":[76],"lead":[77],"bugs.":[79],"The":[80],"promise":[81,117,127,165,170,190,212],"graph":[82],"was":[83],"proposed":[84],"a":[86,160],"graphical":[87],"aid":[88],"understanding":[90],"debugging":[92],"code.":[94],"However,":[95],"it":[96,177],"did":[97,107],"not":[98,108],"cover":[99],"all":[100,131],"promise-related":[101,132],"features":[102,133],"or":[110],"evaluate":[111,173],"any":[112],"technique":[113],"constructing":[115],"graphs.":[118],"In":[119],"this":[120],"paper,":[121],"we":[122,149],"extend":[123],"notion":[125],"graphs":[128,166,191,213],"include":[130],"including":[137],"default":[138],"reactions,":[139],"exceptions,":[140],"synchronization":[143],"operations":[144],"race":[145],"all.":[147],"Furthermore,":[148],"report":[150],"on":[151],"construction":[153],"evaluation":[155],"PromiseKeeper,":[157],"which":[158],"performs":[159],"dynamic":[161],"analysis":[162],"create":[164],"infer":[168],"anti-patterns.":[171],"We":[172],"PromiseKeeper":[174,194],"by":[175,193],"applying":[176],"12":[179],"open":[180],"source":[181],"Node.js":[183],"applications.":[184],"Our":[185],"results":[186],"suggest":[187],"constructed":[192,216],"developers":[197],"with":[198,217],"valuable":[199],"information":[200],"about":[201],"occurrences":[202],"anti-patterns":[205],"their":[207],"code,":[209],"be":[215],"acceptable":[218],"run-time":[219],"overhead.":[220]},"counts_by_year":[{"year":2024,"cited_by_count":1},{"year":2023,"cited_by_count":4},{"year":2022,"cited_by_count":5},{"year":2021,"cited_by_count":3},{"year":2020,"cited_by_count":4},{"year":2019,"cited_by_count":5}],"updated_date":"2026-05-21T06:26:12.895304","created_date":"2025-10-10T00:00:00"}
