如何使承诺返回结果?

时间:2017-05-23 14:44:46

标签: javascript node.js q

我有一个要求,我们需要使用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的新手。所以如果这是非常明显的,请原谅!

我认为这个问题被标记为重复。但是在另一个问题中,我找不到解决方案来返回结果。它仍然会回报承诺。

1 个答案:

答案 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"] 
});