级联的Promise中缺少对象变量

JD艾伦:

所以我一直在寻找答案,所以很抱歉,如果我的Google Foo不好...

我有一个Node.JS模块,它具有Promise函数,有时会调用其他Promise函数(这是示例代码,但其行为与我实际尝试编写的代码相同):

"use strict";

function Top() {
  this.var1 = "";
  this.var2 = [];
  this.debug = 0;
}

Top.prototype.longRun1 = function() {
  return new Promise((resolve,reject) => {
    // call out to network service here...
    this.var1 = "LR1";
    this.var2.push(this.var1);
    Top.prototype.longRun2().then((out) => {
      resolve(out);
    }).catch((err) => {
      console.log("LR2:" + err);
    });
  });
}

// longRun2() can be called by other non-Promise functions.
Top.prototype.longRun2 = function() {
  return new Promise((resolve,reject) => {
    // call to a second network service...
    this.var1 = "LR2";
    this.var2.push(this.var1);
    resolve(this.var2.length);
  })
}

Top.prototype.dump = function() {
  return this.var2;
}

module.exports = Top;

像这样使用:

var Top = require('./test2.js');

var t = new Top();

t.longRun1().then((out) => {
  console.log(out);
  console.log(t.var1);
  console.log(t.dump());
  console.log(t.var2.length);
}).catch((err) => {
  console.log("TOP:" + err);
});

运行此命令时,出现以下错误: LR2:TypeError: Cannot read property 'push' of undefined

因此,所有对象的this.变量似乎都在第二个Promise中消失了:(我认为由于这两个函数都属于对象,因此它们将继承对象的this.变量,但似乎我的想法是错误的。

为了引用第二个Promise函数中的Object变量,是否需要添加某种范围定义?

longRun2()函数需要longRun1()的结果,因此顺序很重要。一旦调用longRun1(),就可以直接调用longRun2()和其他函数。

感谢您的帮助和见解!

szatkus:

这是因为您使用调用了该方法prototype在这种情况下Top.prototype,绑定到this通常this,对象是“点之前”。这就是为什么在第一个电话t.longRun1()thist

正确的电话是:

this.longRun2().then((out) => {
  resolve(out);
}).catch((err) => {
  console.log("LR2:" + err);
});

如果要对this变量进行更多控制,可以使用以下方法之一:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Shiny 中的级联变量选择

来自分类Dev

从唯一的级联变量中减去1

来自分类Dev

为什么要在变量中存储Promise对象?

来自分类Dev

使用级联关系在Realm中删除对象

来自分类Dev

python 2.7中的类对象的级联列表

来自分类Dev

访问级联的ArrayList中包含的特定对象

来自分类Dev

jQuery转换Promise级联

来自分类Dev

Promise对象中的setTimeout

来自分类Dev

子集变量R中缺少值的变量

来自分类Dev

在变量中声明数组以用于级联下拉javascript

来自分类Java

在Hibernate中删除级联多个对象的最快方法

来自分类Dev

在Google数据存储中对ReferenceProperty对象进行级联删除

来自分类Dev

为什么缺少对象变量或带块变量?

来自分类Java

休眠级联删除对象

来自分类Dev

在Promise中传递变量

来自分类Dev

解决javascript对象中的Promise

来自分类Dev

从then函数中访问promise对象

来自分类Java

Java中的“对象”与“对象变量”?

来自分类Dev

变量中的 nodejs 对象

来自分类Dev

JS对象中的变量

来自分类Dev

访问对象中的变量“ this”

来自分类Dev

从列表中填充缺少的df变量

来自分类Dev

如何消除SAS中缺少结果的变量?

来自分类Dev

如何处理JavaScript中缺少的变量?

来自分类Dev

呼叫中的参数#1缺少自变量

来自分类Dev

如何处理R中缺少的变量

来自分类Dev

bash:[:缺少`]'时测试存储在变量中

来自分类Dev

如何填写对象数组中缺少的键?

来自分类Dev

反应:状态对象中缺少属性