gpt4 book ai didi

javascript - 带有对象/原型(prototype)的链式 promise (Q 延迟)

转载 作者:行者123 更新时间:2023-11-29 19:28:45 27 4
gpt4 key购买 nike

我有一个简单的 Javascript(节点)对象,它有一个函数可以在对象上设置一个属性并返回一个 promise 。

请注意,对于此示例,我删除了需要延迟的实际异步调用,因为它不会影响结果。

var q = require("Q");

var Foo = function(){
this.bar = false;
return this;
};

Foo.prototype.set = function(){
var d = q.defer();
this.bar = true;
d.resolve();
return d.promise;
};

Foo.prototype.check = function(){
var d = q.defer();
console.log(this.bar);
d.resolve();
return d.promise;
};

当以如下所示的破坏 promise 的方式调用上面的代码时,this.bar 为真(如预期的那样)。

var foo = new Foo();
foo.set().then(function(){
foo.check();
});

但是,当它在链中被调用时,它是未定义的:

foo.set().then(foo.check);

我很想知道是什么原因造成的。我最好的猜测是我的对象的方法链接在一起的方式存在闭包问题。

在大多数情况下,我会将值传递给 resolve/reject 并从那里开始。在这种情况下,我想通过一系列顺序函数(有些需要延迟)来运行一些数据。我不想将输出传递给链中的每个函数,而是希望在对象本身中存储和更新数据。

任何清晰度将不胜感激!

最佳答案

你在没有上下文的情况下调用回调并且this只是全局对象的问题

作为解决方案,您需要像这样绑定(bind)上下文

foo.set().then(foo.check.bind(foo));

关于javascript - 带有对象/原型(prototype)的链式 promise (Q 延迟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29479460/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com