VSCode: 如何记录用复杂对象解析的承诺?

VSCode: How to document promise that resolves with complex object?

我有一个函数 f returns 一个 Promise。返回的 Promise resolve({name: String, data: Object})reject(Error)

我在 VSCode 中尝试了以下语法(如 an issue in JSDoc 中所述),但它不起作用:

/**
 * @promise fPromise
 * @reject {Error}
 * @fulfill {Object} project
 * @fulfill {Object} project.data
 * @fulfill {String} project.name
 * @returns fPromise
*/

为了尽可能清楚,为什么不把对象的性质放在一行来描述呢?它只是应该是对那个实现的描述。

/**
 * @promise fPromise
 * @fulfill {Object} A project object with the format {name: String, data: Object}
 * @reject {Error}
 * @returns fPromise
*/

或者,如果你想处理动态生成的对象键,类似于Google Style Guide:

/**
 * @promise fPromise
 * @fulfill {Object.<String, Object>} 
 * @reject {Error}
 * @returns fPromise
*/

这样一来,阅读您评论的任何人都可以了解 returned 对象的外观、键是什么以及每个键中的值类型。

除非,你试图说它可以return三种可能性中的任何一种。那么我认为您的原始格式更能描述 Promise 实现的可能结果。

我认为最好的办法是将 fulfill 响应包装到自定义对象中:

/**
 * @promise fPromise
 * @reject {Error}
 * @fulfill {Project}
 * @returns {Promise.<Project>}
*/
function renderResults(data) {
    return new Promise((resolve, reject) => {
        resolve(new Project())
    })
}

renderResults()

function Project() {
    this.data = "data";
    this.name = "project phoenix"
    this.location = {
        city: 'seattle',
        state: 'wa'
    }
}

这将在 VS Code 中显示如下: