Jef*_*eff 59 javascript promise es6-promise
我有以下功能,试图使用Promises.
var getDefinitions = function() {
return new Promise(function(resolve) {
resolve(ContactManager.request("definition:entities"));
});
}
var definitions = getDefinitions()
Run Code Online (Sandbox Code Playgroud)
definitions 正在回归:
Promise {
[[PromiseStatus]]: "resolved",
[[PromiseValue]]: child
}
Run Code Online (Sandbox Code Playgroud)
我想获得PromiseValue的价值,但要求
var value = definitions.PromiseValue; // undefined
Run Code Online (Sandbox Code Playgroud)
给了我一个不确定的结果.
我的问题是双括号是什么PromiseValue意思,我该如何检索它的值[[ ]].
Ben*_*aum 91
[[]]我的问题是双括号[[]]的含义是什么,以及如何检索[[PromiseValue]]的值.
这是一个内部财产.您无法直接访问它.本机承诺通常只能then用promises 解包或异步 - 请参阅如何从异步调用返回响应.引用规范:
它们仅由出于说明目的而由本规范定义.ECMAScript的实现必须表现得就像它以此处描述的方式在内部属性上生成和操作一样.内部属性的名称用双方括号[[]]括起来.当算法使用对象的内部属性并且对象未实现指示的内部属性时,将引发TypeError异常.
你不能
非常好!正如上面的引言所说它们只是在规范中使用 - 所以它们没有理由真正出现在你的控制台中.
不要告诉任何人,但这些都是私人符号.它们存在的原因是其他内部方法能够访问[[PromiseValue]].例如,当io.js决定返回promises而不是回调时 - 这些将允许它在保证的情况下快速访问这些属性.他们不暴露在外面.
除非您制作自己的Chrome或V8版本.也许在带有访问修饰符的ES7中,现在没有办法,因为它们不是规范的一部分,并且会突破浏览器 - 抱歉.
getDefinitions().then(function(defs){
//access them here
});
Run Code Online (Sandbox Code Playgroud)
虽然如果我不得不猜测 - 你没有正确地转换API,因为这种转换仅在方法是同步的情况下才有效(在这种情况下不返回一个promise)或者它返回一个已经做出的承诺它解决了(这意味着你根本不需要转换 - 只是return.
caf*_*ike 13
我今天也遇到了这个问题,碰巧找到了解决方案.
我的解决方案如下所示:
fetch('http://localhost:3000/hello')
.then(dataWrappedByPromise => dataWrappedByPromise.json())
.then(data => {
// you can access your data here
console.log(data)
})
Run Code Online (Sandbox Code Playgroud)
这dataWrappedByPromise是一个Promise实例.为了访问Promise实例中的数据,我发现我只需要用该方法解包该实例.json().
希望有所帮助!
这个例子是用 react 但在大多数情况下它应该是相同的。
将this.props.url替换为您要获取的 url 以使其适用于大多数其他框架。
解析res.json()返回 [[promiseValue]] 但是,如果您随后将其返回到下面的另一个.then()方法,则可以将其作为总数组返回。
let results = fetch(this.props.url)
.then((res) => {
return res.json();
})
.then((data) => {
return data;
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44339 次 |
| 最近记录: |