'then is not a function' 在 MongoDB Stitch Webhook 中

'then is not a function' in MongoDB Stitch Webhook

MongoDB Stitch Webhook docs 描述了我的精确用例:使用 POST 方法调用 insertOne 然后 return 插入的 _id。

我将下面的示例(直接来自文档)粘贴到 Stitch Function Editor 中。

exports = function(payload, response) {
  const mongodb = context.services.get("mongodb-atlas");
  const requestLogs = mongodb.db("test").collection("requestlogs");
  requestLogs.insertOne({
    body: EJSON.parse(payload.body.text()),
    query: payload.query
  }).then(result => {
    response.setStatusCode(201);
    response.setBody(result.insertedId);
  })
};

我通过调用在函数编辑器控制台中执行函数:

exports({query: {arg1: 'hello', arg2: "world!"}, body:BSON.Binary.fromText('{"msg": "world"}')})

一个错误被 returned 表明 .then 不是一个函数。

error: TypeError: 'then' is not a function

是文档错了,还是我误入歧途了?

某些方法,例如 .then,会在函数编辑器中抛出错误。就我而言,这是功能编辑器的缺点,而不是我的代码中的错误。 使用 fetch 或 Postman 调用 webhook,函数按预期执行。

Incoming Webhook 文档包含一个特殊说明:

If you want to debug a webhook function response from the function editor, you must manually provide the HTTP response object when you run the function.

exports( { body: "This document is the webhook payload" }, new HTTPResponse() )

这让我意识到函数编辑器作为 JS 处理程序的特殊性质。使用 Postman 我确认函数 运行 在调用时没有错误。函数编辑器产生的错误是一个转移注意力的错误。