我是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()
保持原样非常重要。
知道该怎么做吗?
答案 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
的已解决值,但只有在好的准备就绪时,从现在起一秒钟。