我有一个要求,我们需要使用promises编写节点模块。所以会有3种不同的承诺。只有当所有三个人都解决时,才应该发回结果。我写了一些代码。目前结果是未定义的。让我知道我可以添加什么来解决这个问题。
这是节点模块代码 -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teste_Menu
{
class Program
{
static void Main(string[] args)
{
Menu();
List<Modelo> ListaModelo = new List<Modelo>();
ListaModelo.Add(new Modelo("Honda", "Civic", 180, 29000));
ListaModelo.Add(new Modelo("Honda", "Jazz", 100, 15000));
ListaModelo.Add(new Modelo("Honda", "HRV", 115, 22500));
}
static void Menu()
{
string escolha;
do
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("\n");
Console.WriteLine(" ==================================================================================================== ");
Console.WriteLine(" =========================================== Carros ================================================= ");
Console.WriteLine(" ==================================================================================================== \n\n");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(" * Consultar Lista de Carros -----------------------------------------------> (1)\n ");
escolha = Console.ReadLine();
switch (escolha)
{
case "1": ListaModelo();
break;
}
Console.ReadLine();
}
while (escolha != "2");
}
static void ListaModelo()
{
{
var ListaModelo = new List<int>(Enumerable.Range(0, 3));
ListaModelo.ForEach(Console.WriteLine);
}
}
}
}
这是调用代码 -
1
2
3
4
所以我需要找到一种方法来保持节点模块的执行,直到所有的promises都得到解决。
目前输出是 -
结果未定义
P.S我是node.js的新手。所以如果这是非常明显的,请原谅!
我认为这个问题被标记为重复。但是在另一个问题中,我找不到解决方案来返回结果。它仍然会回报承诺。
答案 0 :(得分:2)
您可以使用Promise.all()
来获取“当可迭代参数中的所有承诺都已解决时解析的单个Promise,或者拒绝第一个拒绝的承诺”。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([p1, p2, p3]).then(values => {
console.log(values); // [3, 1337, "foo"]
});