Chr*_*ris 7 javascript promise ember.js
我正努力在Ember控制器中链接承诺.
此处还包括Ember代码:
App.IndexController = Ember.Controller.extend({
result_of_request: 'nothing',
first_request: function() {
// create a promise which is immediately resolved
var promise = new Ember.RSVP.Promise(function(resolve, reject){
resolve("first resolved");
});
// once the promise has resolved it should call the next function?
promise.then(function(data) {
// does log the data (has resolved)...
console.log("data is : " + data);
// but neither this
this.set("result_of_request", "first");
// nor this work
second_request();
});
}.property(),
second_request: function() {
console.log("second request");
}.property()
});
Run Code Online (Sandbox Code Playgroud)
任何意见,将不胜感激.
int*_*xel 12
有两个问题,第一this是不可用的承诺回调,因为它是异步里面,这意味着承诺解决的时候this没有更多的是指控制器,所以你需要存储的值事先的地方,你可以看到我们把它存放在一个叫做的var self.第二个.property()你的第二个功能也应该删除,因为我看不到它是不需要的.此外,您应该使用.send([methodname])而不是直接调用控制器方法或使用点表示法.
这使我们进行了这些修改,使您的示例工作:
App.IndexController = Ember.Controller.extend({
result_of_request: 'nothing',
first_request: function() {
var self = this;
// create a promise which is immediately resolved
var promise = new Ember.RSVP.Promise(function(resolve, reject){
resolve("first resolved");
});
// once the promise has resolved it should call the next function?
promise.then(function(data) {
// does log the data (has resolved)...
console.log("data is : " + data);
self.set("result_of_request", "first");
self.send("second_request");
});
}.property(),
second_request: function() {
console.log("second request");
console.log(this.get("result_of_request"));
}
});
Run Code Online (Sandbox Code Playgroud)
上面的代码产生了这个控制台输出:
"data is : first resolved"
"second request"
"first"
Run Code Online (Sandbox Code Playgroud)
在这里你的工作jsbin.
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
6727 次 |
| 最近记录: |