回报承诺价值

时间:2014-12-15 14:34:15

标签: javascript promise

我是Promise's的新手,我正试图抓住价值。

这是我想要做的事情的想法:

API = {
  get: function() {
    return new Promise(function(res) {
      setTimeout(function() {
        res('foo')
      }, 1000)
    })
  }
}

var foo = API.get()

console.log(foo)

var foo = API.get()保持原样非常重要。

知道该怎么做吗?

2 个答案:

答案 0 :(得分:3)

Promise仍然是异步的。您仍然无法在同步代码中检查它们的值。

你需要:

API.get().then(function(result) {
    // Resolved value from the Promise object returned by API.get()
    console.log(result);
});

API.get()返回 promise对象,然后在该对象上调用.then()方法。

另一种更冗长的方式是:

var fooPromise = API.get();
fooPromise.then(function(result) { 
    console.log(result); 
});

答案 1 :(得分:0)

承诺是关于未来发生的事情;除非你拥有时间机器,否则你现在无法检查它们的最终价值。

我不是建议您这样做,但仅仅出于教学目的,如果您真的希望您的代码按照您的意图运行,您可以重新定义console.log以保证意识:

console.log = function() {
    var old_console_dot_log = console.log.bind(console);
    return function(maybe_promise) {
        Promise.resolve(maybe_promise).then(old_console_dot_log);
    };
}();

(此版本仅处理一个参数;处理更多参数作为练习。)

现在当你说console.log(foo)时,它会记录foo的已解决值,但只有在好的准备就绪时,从现在起一秒钟。