如何使用“Q.set”?
How can I use `Q.set`?
根据 API reference,Q 提供了使用对象的承诺扩展,但它们的行为并不像我期望的那样。
考虑以下代码行:
Q({foo:"bar"}).set("foo","baz").then(console.log);
我本以为会打印 {"foo": "baz"}
,但实际上是 undefined
。
我是不是误解了 set
方法,还是只是用错了方法?
Q.set
用于扩充一个对象,在未来它不会 return 扩充的对象(事实上,它根本不会 return 任何东西).这就是为什么您在 console.log
.
中得到 undefined
你需要这样使用它
var obj = {
foo: "bar"
};
Q(obj).set("foo", "baz").then(function () {
console.log(obj);
});
这将打印
{ foo: 'baz' }
属性 foo
在 obj
中设置为 baz
并且由于它是沿着承诺链传递的,我们需要显式打印它。
你可以像这样使用姊妹功能Q.get
Q(obj).set("foo", "baz").then(function () {
return Q.get(obj, 'foo');
}).then(console.log);
你可能想知道为什么你做不到
Q(obj).set("foo", "baz").get('foo').then(console.log);
它不会工作,因为与 set
一开始没有工作的原因相同。 set
不解析修改后的对象。 这就是为什么我们需要从实际对象中显式获取它。
FWIW,我发现这个,set
不可链接,有点奇怪。所以,我 submitted a pull request to the Q library 想改变这个,但它被拒绝了。
根据 API reference,Q 提供了使用对象的承诺扩展,但它们的行为并不像我期望的那样。
考虑以下代码行:
Q({foo:"bar"}).set("foo","baz").then(console.log);
我本以为会打印 {"foo": "baz"}
,但实际上是 undefined
。
我是不是误解了 set
方法,还是只是用错了方法?
Q.set
用于扩充一个对象,在未来它不会 return 扩充的对象(事实上,它根本不会 return 任何东西).这就是为什么您在 console.log
.
undefined
你需要这样使用它
var obj = {
foo: "bar"
};
Q(obj).set("foo", "baz").then(function () {
console.log(obj);
});
这将打印
{ foo: 'baz' }
属性 foo
在 obj
中设置为 baz
并且由于它是沿着承诺链传递的,我们需要显式打印它。
你可以像这样使用姊妹功能Q.get
Q(obj).set("foo", "baz").then(function () {
return Q.get(obj, 'foo');
}).then(console.log);
你可能想知道为什么你做不到
Q(obj).set("foo", "baz").get('foo').then(console.log);
它不会工作,因为与 set
一开始没有工作的原因相同。 set
不解析修改后的对象。 这就是为什么我们需要从实际对象中显式获取它。
FWIW,我发现这个,set
不可链接,有点奇怪。所以,我 submitted a pull request to the Q library 想改变这个,但它被拒绝了。