Skip to content

[CS2] Enhancement: Support for 'await' on REPL without having to wrap it inside a function #4603

@AlvaroBernalG

Description

@AlvaroBernalG

Hello good people of coffeescript:

Currently, the way I can test how a library that heavily rely on promises works on the REPL is as follow:

coffee> wikijs = require('wikijs')
coffee> batman = ""
coffee> wikijs().page('batman'). then (response)=> batman = response
Promise {
  <pending>,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function: debugDomainError] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }
coffee>  batman
' '  // too soon.. the promise hasn't resolved yet
coffee>  batman 
{
  links: [Function: links],
  categories: [Function: categories],
  coordinates: [Function: coordinates],
  info: [Function: n],
  backlinks: [Function: backlinks],
  rawImages: [Function: f],
  mainImage: [Function: mainImage]
 }
coffee>  mainImage = ''
coffee> wikijs().page('batman'). then (response)=> response.mainImage()). then ( img) => mainImage = img
Promise {
  <pending>,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function: debugDomainError] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }
coffee> mainImage
'https://upload.wikimedia.org/wikipedia/en/7/74/Batman_Detective_Comics_Vol_2_1.png'

I can also define a function, but doing that on a REPL is awkward. I would rather create a file and set up an environment that auto run my script on save instead.

It would great if I could just take advantage of the new async/await features of coffeescript 2.0 and do this instead:

coffee> wikijs = require('wikijs')
coffee> batman = await wikijs().page('batman')
coffee> batman
{
  links: [Function: links],
  categories: [Function: categories],
  coordinates: [Function: coordinates],
  info: [Function: n],
  backlinks: [Function: backlinks],
  rawImages: [Function: f],
  mainImage: [Function: mainImage]
 }
coffee> await batman.mainImage()
'https://upload.wikimedia.org/wikipedia/en/7/74/Batman_Detective_Comics_Vol_2_1'

Which adjust perfectly with the philosophy of a REPL which is providing you with an environment to quickly and easily test and prototype stuff out.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions