js await 返回多个值,不是多个promise

452 阅读1分钟

问题

今天遇到一个问题,await要返回多个值的情况

类似下面的情况 resolve的时候有2个值


function testFunction() {
  return new Promise(function(resolve, reject) {
    resolve("test1", "test2");
  });
}

async function run() {
  var response = await testFunction();
  console.log(response); // test1
}

run();

但是似乎没有支持的语法来实现

async function run() {
  var [response1,response2] = await testFunction();
  console.log(response1); // "t"
}

这样写的话,也是解构第一个值

试试这样的语法?

function testFunction1() {
  return new Promise(function(resolve, reject) {
    testFunction().then((v1,v2)=>{
	resolve([v1,v2])
    })
  });
}

async function run() {
  var [response,response2] = await testFunction1();
  console.log(response); // test1
  console.log(response2); // undefined
}

并不行!~

其实是promise的resolve问题


Promise.resolve(value); //只支持一个参数


所以只能把原函数改成这样

function testFunction() {
  return new Promise(function(resolve, reject) {
    resolve(["test1", "test2"]);
  });
}

总结

一直以为resolve 支持多个参数的...