Skip to content

Instantly share code, notes, and snippets.

@validkeys
Created April 27, 2021 18:55
Show Gist options
  • Select an option

  • Save validkeys/5ce2f2282b79a2446cb61af2c5ee0e9c to your computer and use it in GitHub Desktop.

Select an option

Save validkeys/5ce2f2282b79a2446cb61af2c5ee0e9c to your computer and use it in GitHub Desktop.
ember-concurrency-encapsulated
import Component from '@glimmer/component';
import { task } from "ember-concurrency"
import { reads } from '@ember/object/computed'
import { computed, action } from '@ember/object'
import RSVP from "rsvp"
export default class extends Component {
@(task({
reponse: null,
dfd: null,
respond() {
return this.dfd.resolve(true)
},
*perform() {
this.dfd = RSVP.defer()
let response = yield this.dfd.promise
this.response = response
return this
}
}).enqueue()) enqueueTask
@reads("enqueueTask.last") lastTask
@computed("lastTask.isRunning")
get currentTask() {
const { lastTask } = this
console.log("computing")
return lastTask && lastTask.isRunning ? lastTask : null
}
@action
enqueue() {
this.enqueueTask.perform()
}
@action
respond(currentTask) {
console.log(currentTask)
currentTask.respond(true);
}
}
import Controller from '@ember/controller';
export default class ApplicationController extends Controller {
appName = 'Ember Twiddle';
}
{{#if this.currentTask}}
{{if this.currentTask.isRunning "Awaiting your response" "Response received. I should no longer be showing"}}
<br>
<button {{on "click" (action this.respond this.currentTask)}}>
Respond
</button>
{{/if}}
<hr>
<div>
<button {{on "click" (action this.enqueue)}}>Enqueue Something</button>
</div>
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0",
"ember-concurrency": "2.0.3"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment