簡體   English   中英

var在Promise中變為未定義

[英]var becomes undefined inside Promise

這可能是一個很小的問題,但我找不到解決方案,請耐心等待!

我不明白為什么在const body = ctx.request.body ctx變得不確定。 之前,它延續thiscreate()它調用函數createEntity()

我究竟做錯了什么?

我正在這樣調用函數createEntity

module.exports = {
  createEntity: () => {
    var ctx = this  // both ctx and this are fine
    return new Promise((resolve, reject) => {
      const body = ctx.request.body  // <-- ctx is undefined
      resolve();
    })
  }
}

create()調用createEntity() 這是一個通過Koa.js用co()包裝的生成器函數

create: function * () {
    this.body = yield createEntity.call(this)
}

編輯:下面是截圖為什么我認為this是打完電話后精createEntity 在此處輸入圖片說明

ctx和這都很好

我不信。 您正在使用箭頭功能 您無法通過call設置箭頭函數的this ,因為箭頭本身沒有this 1

請改用普通功能。

另請參見Arrow函數與函數聲明/表達式:它們是否等效/可互換?


1: createEntity內部的this指模塊的頂層this ,即module.exports

this;        // <------------|
module.exports = {           |
  createEntity: () => {      |
    var ctx = this     // ---|
  }
}
console.log(this === module.exports); // true

通過分配箭頭功能createEntitythis箭頭函數內部分配給的值this在范圍,其中被宣布為箭頭的功能,這可能是全局對象(因此,如果您正在使用use strictthis將是undefined ),即使您使用call調用該函數,它也會保持這種狀態。

改用通用函數表達式

createEntity: function () {
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM