Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我承诺不替换构造函数中的数据?_Javascript_Node.js_Ecmascript 6_Promise_Es6 Promise - Fatal编程技术网

Javascript 为什么我承诺不替换构造函数中的数据?

Javascript 为什么我承诺不替换构造函数中的数据?,javascript,node.js,ecmascript-6,promise,es6-promise,Javascript,Node.js,Ecmascript 6,Promise,Es6 Promise,请让我知道我哪里做错了。 我有一个带构造函数的类和两个方法。我希望find()方法将数据从查询推送到数组。我不明白我在哪里丢失了数组值,对于其他方法或只是检查值,它是空的 class DeleteOffers { constructor() { this.index = 'index'; this.array = []; this.body = { query: { rang

请让我知道我哪里做错了。 我有一个带构造函数的类和两个方法。我希望find()方法将数据从查询推送到数组。我不明白我在哪里丢失了数组值,对于其他方法或只是检查值,它是空的

class DeleteOffers {

    constructor()
    {
        this.index = 'index';
        this.array = [];
        this.body = {
            query: {
                range: {
                    date_end: {
                        gt: format.asString('yyyy-mm-dd', new Date()),
                        format: "yyyy-mm-dd"
                    }
                },
            },
            _source: "_id"
        };
    }

    find() {
        return client.search({index: this.index, body: this.body})
            .then(response => {
                var that = this;
                return response.hits.hits.map(value => that.array.push(value._id))
            })
            .catch(error =>
                console.log(error.message)
            )

    }

    remove() {
        console.log(this.array); // WHY IT'S EMPTY?
    }

}

const object = new DeleteOffers();
object.find(); // []
object.remove(); // []
return res.json(object.array); // []

您在查找后调用remove,但console.log中的find need wait承诺已结束,但在remove中不需要。现在,您可以访问此指针。

您只需等待查找操作:

 (async function() {
    const object = new DeleteExpiredRentalOffers();
    await object.find();
    object.remove();
})();
或:


response.hits.hits是否正确,还是应该是
response.hits
?您是否测试/调试了该函数以确保返回了有效的响应,并且
console.log
ged了
response
数据结构?它的语法是100%有效的。我可以在arrow函数中执行console.log(response.hits.hits.\u id),它提供了我想要的。但无法刷新/保存到类数组。我已撤消您的更改,请不要在建议中编辑。您的代码很好,
var=this
是不必要的(您也可以在地图部分访问
this
),但它可以工作。感谢您的回复。我编辑代码。是的,但现在我无法访问构造函数中的属性。此.array为空。我也不明白为什么它在find()之前调用函数remove()。这对我来说似乎不合逻辑。不客气,请检查它是否可以修复您的错误。刷新页面。;)你用
这个
创建
(承诺内的指针,应该在
查找
中复制这个,而不是在
内然后
)你在
查找
后调用
删除
,但是
控制台。在
查找
中记录
需要等待承诺结束,但在
删除
中不需要。现在,您可以访问此指针。
 const object = new DeleteExpiredRentalOffers();
 object.find().then(() =>  object.remove());