【问题标题】:Node TypeError: Promise resolver #<Promise> is not a functionNode TypeError: Promise resolver #<Promise> 不是函数
【发布时间】:2019-02-14 20:25:24
【问题描述】:

我在第一次拒绝时尝试使用的承诺出现类型错误,但据我所知,它看起来像我找到的示例。我做错了什么?

var resolve, reject;
exports.handler = (event, context, callback) =>
{

	//var filePromise = new Promise(ProcessFile(resolve, reject));



	var filePromise = new Promise(function ProcessFile()
	{
		console.log("Processing file");
		return new Promise((resolve, reject) => {
		var array;

		if(array.length <0)
		{
			resolve("We have stuff in the array, looks promising");
		}
		else
		{
			reject("Something went wrong populating the array");
		}

		});
	});

	filePromise.then(CheckHeaders());

	function CheckHeaders()
	{
		return new Promise((resolve, reject) =>
		{
			console.log("Checking headers");
			
			reject("Unauthorised");
		});	//close promise
	 }	//close function
};

【问题讨论】:

  • 类型错误?你在使用打字稿吗?还是在运行代码时得到TypeError
  • filePromise.then(CheckHeaders()); 必须是 filePromise.then(CheckHeaders); - then 需要一个函数,而不是一个承诺。

标签: javascript node.js promise aws-lambda


【解决方案1】:

你只需要一个承诺。

var filePromise = new Promise(function(resolve, reject) {
  console.log("Processing file");
  var array = [1];

  if (array.length > 0) {
    resolve("We have stuff in the array, looks promising");
  } else {
    reject("Something went wrong populating the array");
  }
});

function CheckHeaders() {
  return new Promise((resolve, reject) => {
    console.log("Checking headers");

    reject("Unauthorised");
  }); //close promise
}

filePromise
  .then(res => {
    console.log(res)
    CheckHeaders()
      .then(res2 => console.log(res2))
  }).catch(err => console.warn(err));

正如@Bergi 指出的那样,最好只有一个整体承诺。

var filePromise = new Promise(function(resolve, reject) {
  console.log("Processing file");
  var array = [1];

  if (array.length > 0) {
    resolve("We have stuff in the array, looks promising");
  } else {
    reject("Something went wrong populating the array");
  }

  //here check headers
  reject("Unauthorised");


});

filePromise
  .then(res => {
    console.log(res)
  }).catch(err => console.warn(err));

【讨论】:

  • 您应该只需要一个catch。除非必须,否则不要嵌套 promise。
  • 我说的是filePromise.then(res =&gt; { console.log(res); return /* sic! */ CheckHeaders(); }).then(res2 =&gt; console.log(res2), err =&gt; console.warn(err));,而不是关于将filePromisecheckHeaders 承诺合并(虽然我不知道,从伪示例代码中不清楚他们会做什么)
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 2017-03-26
相关资源
最近更新 更多